Вам, вероятно, следует использовать std :: deque и вытолкнуть все элементы из begin () в begin () + front, а из end () - в end ().Это освободит неиспользованную память минус крошечный кусок с передней части первого сегмента и с конца последнего сегмента.std :: deque очень производительный, так как он хранит свое содержимое в массивах массивов.Он не так эффективен, как вектор, но на практике он, вероятно, достаточно хорош, поскольку имеет всего 1 дополнительный уровень косвенности.Примерно в этом разница:
- std :: vector [i] -> буфер возврата [i]
- std :: deque [i] -> buckets [i] ->return bucket [i];
Ссылка: https://en.cppreference.com/w/cpp/container/deque
Это зависит от того, насколько вы растете и сжимаете свой вектор, но deque сжимается и растет без копирования каких-либо элементов, егопросто распределение / освобождение ведра.Так что в некоторых сценариях он может быть намного более производительным, чем вектор.