Вот трюк, описанный в книге Скотта Мейерса «Эффективный STL».
Трюк называется «сжатый к размеру» или, как его называет автор, Трюк со свопом .
std::vector<int>(V).swap(V);
Идея очень проста, мы создаем временную копию V, для которой размер == емкость, и сопоставляем ее с фактическим V. Это просто и просто.
vector<int> V;
for(int i=0; i<10; ++i)
{
V.push_back(i);
}
std::cout<<V.size()<<" "<<V.capacity()<<endl;
std::vector<int>(V).swap(V);
std::cout<<V.size()<<" "<<V.capacity()<<endl;
Теперь вывод для этого кодаэто:
10 13
10 10
Примечание: этот прием применяется также для std::string and std::deque