从中删除元素时如何减小向量的大小?

时间:2013-04-23 15:53:00

标签: c++ vector c++11 resize splice

我正在编写一个基于输入大小限制内存的程序。假设输入大小为1000,然后我将它们存储在大小为1000的向量中。稍后当我处理此向量中的数据时,每当元素处理完毕,我将其推入第二个向量并使用vector.erase从原始矢量中删除它。所以我认为我总是使用1000个大小的内存,因为总共有1000个元素存储在这两个向量中。

但是我错了,事实证明我使用了2000个内存,因为erase在删除元素时不会减小向量的大小...我想它对splice来说是一样的吗?

那么有没有办法让我的程序只使用1000个内存?我可以通过添加一个attribut来解决它,并标记元素是否已处理,但我觉得这不是最好的方法。谢谢!

2 个答案:

答案 0 :(得分:4)

这种尝试和缩小容量的技术可以在C ++ 03和C ++ 11中使用:

std::vector<int> v;
// ...
std::vector<int>(v.begin(), v.end()).swap(v);

live example包含演示。该技术是否有效取决于在使用v元素初始化临时向量时实现分配的内存量。

在C ++ 11中,可以调用成员函数shrink_to_fit()来执行非绑定请求,以将向量的容量缩小到保存当前容器中的元素所需的大小。

请注意,“非绑定”表示标准不需要实现来实际满足此请求。

答案 1 :(得分:0)

C++11shrink_to_fit()添加了std::vector函数。如果您正在寻找一种减小矢量大小的方法,那么在从中删除元素之后,这将是最佳选择。 Here is more information on it.