3

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

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

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

4

2 回答 2

4

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

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

这个实时示例包含一个演示。该技术是否有效取决于实现在使用 的元素初始化临时向量时分配了多少内存v

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

请注意,“非约束性”意味着标准不要求实现实际满足此要求。

于 2013-04-23T17:56:39.837 回答
0

C++11shrink_to_fit()为.添加了一个功能std::vector。如果您正在寻找一种方法来减少向量的大小,在从中删除元素之后,那将是您的选择。这是有关它的更多信息。

于 2013-04-23T16:00:11.950 回答