std::vector<int> v(myVec);
myVec.swap(v);
Это инициализирует вектор с тем же количеством элементов, однако для его хранения должно быть достаточно памяти.Затем он заменяется оригиналом, это должно поменять хранилище данных (используя дешевый обмен указателей), а слишком большой массив будет уничтожен.
или в C ++ 11 вы можете использовать std::vector::shrink_to_fit
myVec.shrink_to_fit();
http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit
Если у вас это есть, это гораздо предпочтительнее, хотя это не является обязательным (зависит от реализации, сколько, если таковые имеются, удаляется), так что если это действительно большойвведите, затем убедитесь, что вы профилируете свой код, чтобы убедиться, что он удаляет их.
РЕДАКТИРОВАТЬ: как предположил Дэвид, существует сокращение для первого метода, если у вас нет C ++ 11, то есть:
std::vector<int>(myVec).swap(myVec);
Преимущество заключается в мгновенном уничтожении временного в конце выражения.