Зарезервированная память не уменьшается при уменьшении размера вектора, потому что это, как правило, лучше для производительности. Сокращение объема памяти, зарезервированного вектором, столь же затратно, как и увеличение размера вектора сверх зарезервированного размера, поскольку для этого требуется:
- Запросить у распределителя новое, меньшее место в памяти,
- Скопируйте содержимое из старого местоположения и
- Скажите распределителю освободить старую ячейку памяти.
В некоторых случаях распределитель может изменить размер выделенного места, но это никоим образом не гарантируется.
Если у вас было очень большое изменение требуемого размера, и вы знаете , что вы не захотите, чтобы этот вектор снова расширялся (принципал местности предполагает, что вы это сделаете, но, конечно, исключения), то вы можете использовать предложенную литва операцию свопа, чтобы явно уменьшить ваш вектор:
vector<vertex>(a).swap(a);