cuốn sách gpt4 ai đã làm

vectơ chứa một số phần tử foo_subclass bố trí bộ nhớ

In lại Tác giả: Walker 123 Thời gian cập nhật: 28-11-2023 00:37:29 29 4
mua khóa gpt4 Nike

Tôi đang nghiên cứu việc sử dụng nhiều std::vector tối ưu hóa giai đoạn cuối của thuật toán Một trong những tối ưu hóa của tôi liên quan đến việc phân lớp foo trong một số trường hợp, điều đó có nghĩa là vectơsẽ bao gồm cả hai foocủa vàfoo_subclasscủa.

foochỉ mộtchar*và một int , Và foo_subclassThêm vào std::chuỗi .Theo tôi hiểu, mỗi cái trong số chúng chiếm một vị trí có chiều rộng cố định trong vectơ (với một con trỏ tới foo_subclass con trỏ tới một chuỗi), nhưng làm cách nào để phân bổ trong vùng chứa khi chúng được trộn lẫn?

câu trả lời hay nhất

Câu trả lời ngắn gọn là "bạn không thể làm điều đó". std::vectorkhông thể chứa foo_subclass : Nếu bạn cố gắng đặt foo_subclassĐi vàovectơ , nó sẽ foo lát cắtfoo_subclass thành phần, tạo một bản sao và đặt nó vào fooĐi vàovectơ .

Câu trả lời dài hơn là có hai cách để giải quyết vấn đề này.

Đầu tiên, bạn có thể tạo một std::vector< std::unique_ptr > -- một vectơĐã chỉ vào foo con trỏ thông minh.~fooĐúngảo , sẽ rất thú vị khi làm việc cùng. Bạn mất dữ liệu liền kề. bạn phải hiểu duy nhất_ptr , nhưng bạn nên biết duy nhất_ptrDẫu sao thì.

Thứ hai, bạn có thể tạo một std::vector< boost::variant< foo, foo_subclass > >hoặc tương đương. Trong trường hợp này, cuối cùng cũng có đủ dung lượng lưu trữ cho foo. hoặc foo_subclass và tại thời điểm truy cập, người dùng phải xác định xem họ đang nhận được cái này hay cái kia. Về lý thuyết, bạn thậm chí có thể viết biến thể của riêng mình khác nhauBằng cách này, nó biết loại được lưu trữ có liên quan và bạn có thể làm điều đó như foo truy cập, chỉ foo_subclasscác instance như là các lớp con của chúng.

Cách đầu tiên dễ dàng hơn nhiều, cách thứ hai là một kỹ thuật tiên tiến hơn và có lẽ không đáng để bạn phải bận tâm.

Về c++ - bố cục bộ nhớ của vector chứa một số phần tử foo_subclass, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/20338985/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress