gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:02:09 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com