Если у вас есть компилятор C ++ 11 или, по крайней мере, ссылка на rvalue, использование swap ничего не будет стоить, если ваш тип данных не плоский (т. Е. Содержит указатели на внешние ресурсы или, другими словами, стоит дорого). копировать), так как он просто переместит ваши структуры вокруг. Поэтому, если у вас есть такой компилятор, создайте конструктор перемещения (подробнее об этом) для типа данных, и все готово. Просто используйте std::vector
с этого момента.
Теперь, если ваши структуры плоские (без внешних ресурсов) и велики, вы, возможно, захотите использовать std::list
, так как объем памяти будет достаточно мал по сравнению с размером вашего типа данных. Поскольку вас интересует только двунаправленный / последовательный доступ к элементам, это может быть как раз то место, где можно использовать список.
Последняя точка и важный фактор, мера . Контейнер по умолчанию для достижения всегда должен быть std::vector
. Измерьте, как оба выполняют, прежде чем слепо выбрать один. Еще один важный фактор - если вам действительно нужно что-то еще сделать с контейнерами, например, произвольный доступ или что-то подобное.
Редактировать : Прежде чем я забуду, вы также можете просто захотеть создать представление над контейнером, содержащим ваши данные, что может быть очень дешево.