我正在编写一个程序,该程序的内 stub 据输入大小而受到限制。假设输入大小为 1000,然后我将它们存储在一个大小为 1000 的 vector 中。稍后当我处理这个 vector 中的数据时,每当一个元素处理完成时,我将它插入我的第二个 vector 并使用 vector.erase 来从原始 vector 中删除它。所以我认为我总是使用 1000 大小的内存,因为这两个 vector 中总共存储了 1000 个元素。
但我错了,事实证明我使用了 2000 内存,因为 erase
在删除元素时不会减小 vector 的大小...我想 splice< 也是一样的
是吗?
那么有没有办法让我的程序只使用 1000 内存?我可以通过添加属性并标记元素是否已处理来解决它,但我觉得这不是最好的方法。谢谢!
最佳答案
这种尝试缩小容量的技术可以在 C++03 和 C++11 中使用:
std::vector<int> v;
// ...
std::vector<int>(v.begin(), v.end()).swap(v);
这live example包含一个演示。该技术是否有效取决于在使用 v
的元素初始化临时 vector 时实现分配了多少内存。
在C++11中,成员函数shrink_to_fit()
可以调用以执行非绑定(bind)请求,以将 vector 的容量缩小到容器中当前容纳元素所需的大小。
请注意,“不具约束力”意味着标准不需要实现来实际满足此请求。
关于c++ - 从 vector 中删除元素时如何减小 vector 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173887/