c++ - 从 vector 中删除元素时如何减小 vector 的大小?

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

我正在编写一个程序,该程序的内 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/

相关文章:

c++ - 如何解决错误 MSB6006 : "cmd.exe" exited with code 3?

c++ - 堆栈类中的赋值运算符问题

c++ - 处理曲面 vector 时如何正确使用 SDL_FreeSurface

c++ - 如何为结构的数据元素赋值

c++ - 在 C++ 中读取内存时出现段错误

c++ - 多态显式模板实例化

c++ - io_service::strand 的 num_implementations 背后的 boost::asio 推理

java - 索引越界异常,我写的函数挂掉了

c++ - 用于按排序顺序存储元素并允许快速索引的数据结构?

C++11 move 构造函数优化