Существует std :: vector , который является оберткой вокруг массива, но он может расширяться и будет работать автоматически. Однако это очень дорогая операция, поэтому, если вы собираетесь выполнять много операций вставки или удаления, не используйте вектор. (Вы можете использовать функцию резервирования, чтобы зарезервировать определенное количество места)
std :: list - это связанный список, который имеет гораздо более быстрое время вставки и удаления, но итерация медленнее, поскольку значения не сохраняются в смежной памяти, что означает, что вычисление адреса намного сложнее и вы не сможете использовать кеш процессоров при переборе списка.
Основным преимуществом по сравнению с вектором или deque является то, что элементы могут быть добавлены или удалены из любого места в списке довольно дешево.
В качестве компромисса есть std :: deque , который внешне работает аналогично вектору, но внутренне они очень разные. Хранилище в деке не обязательно должно быть смежным, поэтому его можно разделить на блоки, что означает, что при росте декы не нужно перераспределять пространство для хранения всего содержимого. Доступ немного медленнее, и вы не можете сделать арифметику указателя, чтобы получить элемент.