让我们
std::vector myVec;
myVec.reserve(10);
如果我只分配了5个元素,我怎样才能重新获得为其他5个元素分配的内存?
答案 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);
这有利于在表达结束时立即销毁临时。