使用std::vector添加和删除大量数据
Adding and removing large amounts of data with std::vector
可能重复:
如何缩小std::vector的尺寸?
即使我调用pop_back()
、clear()
或resize()
,std::vector
似乎也不会释放内存。
有什么好办法处理这个问题吗?例如,在以下代码中:
#include<vector>
using namespace std;
int main(){
int i, j;
vector<int> v[10000];
for( i=0 ; i<10000 ; i++ ){
for( j=0 ; j<100000000 ; j++ ){
v[i].push_back(j);
}
while(v[i].size()>0){
v[i].pop_back();
}
v[i].resize(1);
}
return 0;
}
矢量在完成之前不会释放任何内存。
std::vector
增长但从不收缩。原因是增长是昂贵的,所以如果你收缩然后再增长,那就是浪费性能。
如果你真的想缩小一个大矢量,请使用交换习惯用法:
std::vector<T> vec;
// push push push ...
std::vector<T>(vec).swap(vec);
这并不能保证vec
的新大小恰好是其元素大小的总和,但它应该是接近的。此外,C++0x的std::vector
将有一个shrink_to_fit()
成员,该成员将大致执行此操作。
相关文章:
- 从 Typedef 数据类型中删除常量
- 从输入中删除重复项,而不使用任何数据结构
- 删除使数据处于"错误状态"的默认构造函数的模式?
- 从自定义数据类型向量中删除重复元素
- 如何使用C++删除/更新txt文件中的特定数据
- 如何使用C++删除/更新txt文件中的特定数据?
- 如何从 txt 文件中删除数据/内容
- 如何根据偏移从文件中删除数据
- 如何在返回一次数据后从类实例中删除数据
- 凯撒密码删除数据
- Winsock:从套接字中删除数据
- 为什么我的矢量删除数据
- 设置/删除窗口子类时,正确传递/删除数据
- 双重删除数据不会崩溃
- 具有非常快速的内>数据查找和快速反向查找(搜索/插入/删除数据)的压缩字典?
- 当构造函数抛出异常时,如何删除数据成员的内存
- 从节点中删除数据
- 仅重定向子进程stdin,并从stdout和stderr中删除数据
- 删除数据文件中的条目
- 从链表中删除数据