Я думаю, что вы, возможно, неправильно понимаете разницу между емкостью вектора и его размером.
Емкость - это насколько большой базовый массив на самом деле. Размер - это количество элементов, которые фактически используются в этом массиве.
Когда вы вызываете стирание / удаление, вы удаляете элементы из массива и перемещаете элементы вперед. Однако большой массив не изменяет его емкость. Изменяется только поле размера вектора (вероятно, просто size_t), а также смещаются некоторые элементы.
Простой пример:
Вот int-вектор с емкостью 10 и размером 4.
| 1 | 2 | 4 | 8 | Garbage | Garbage | Garbage | Garbage | Garbage | Garbage |
Теперь, скажем, мы хотим удалить элемент с индексом 1.
Операция будет выглядеть примерно так:
Уничтожить элемент с индексом 1 (в данном случае целое число 2)
Переместить все элементы после индекса 1, которые являются допустимыми вперед, однако необходимо много мест, чтобы не было мусора между началом массива и последним допустимым элементом (в этом случае, сдвиньте все вперед на 1).
Уменьшить поле размера на количество удаленных элементов (в данном случае 1).
Окончательный вектор:
| 1 | 4 | 8 | Garbage | Garbage | Garbage | Garbage | Garbage | Garbage | Garbage |
Нет необходимости перераспределять массивы, поскольку емкость вектора не изменилась.
Я не совсем уверен в семантике операции сдвига вперед, могут быть некоторые вызовы перегрузок конструктора копирования / оператора присваивания (если они есть) при перемещении элементов вперед.