让我们
std::vector myVec;
myVec.reserve(10);
Run Code Online (Sandbox Code Playgroud)
如果我只分配了5个元素,我怎样才能重新获得为其他5个元素分配的内存?
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)
这有利于在表达式结束时立即销毁临时.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |