恢复由reserve()分配的内存

时间:2012-03-08 20:36:21

标签: c++ stdvector

让我们

std::vector myVec;
myVec.reserve(10);

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

1 个答案:

答案 0 :(得分:8)

 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);

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