恢复由reserve()分配的内存

Shi*_*bli 2 c++ stdvector

让我们

std::vector myVec;
myVec.reserve(10);
Run Code Online (Sandbox Code Playgroud)

如果我只分配了5个元素,我怎样才能重新获得为其他5个元素分配的内存?

111*_*111 8

 std::vector<int> v(myVec);
 myVec.swap(v);
Run Code Online (Sandbox Code Playgroud)

这将初始化具有相同数量元素的向量,但是它应该只有足够的内存来容纳它们.然后它与原始交换,这应该交换数据存储(使用廉价指针交换),超大数组将被销毁.

或者在C++ 11中你可以使用 std::vector::shrink_to_fit

myVec.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)

http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit

如果你有这个,这是首选,虽然它是非绑定(实现取决于删除多少),所以如果它是一个非常大的类型,那么请确保您的代码配置文件,以确保它是删除它们.

编辑:正如大卫建议,如果你没有C++ 11,第一种方法有一个简写:

std::vector<int>(myVec).swap(myVec);
Run Code Online (Sandbox Code Playgroud)

这有利于在表达式结束时立即销毁临时.