Если вы знаете верхний предел размера контейнера и не планируете вставки в середине контейнера, вы можете использовать boost :: round_buffer .
Если вы выполняете много операций вставки в середине контейнера, deque
будет лучшим выбором, чем vector
, поскольку он (как правило) группирует элементы в блоки фиксированного размера, а не в один непрерывный блок памяти..
Примечание - QList фактически утверждает, что он использует массив указателей на объекты, если они нетривиальны.Чтобы смоделировать это в C ++, вы должны использовать deque<MyClass*>
или (лучше) некоторую интеллектуальную оболочку указателя на MyClass
, такую как unique_ptr
или shared_ptr
, чтобы предотвратить чрезмерное копирование MyClass
в ведении хозяйства.*
Внутренне, QList представлен как массив указателей на элементы типа T. Если T сам является указателем или базовым типом, который не больше указателя, или если T является одним из общих классов Qt, тоQList хранит элементы непосредственно в массиве указателей.Для списков менее тысячи элементов это представление массива обеспечивает очень быструю вставку в середину и обеспечивает доступ на основе индекса.