首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用std::向量添加和删除大量数据

用std::向量添加和删除大量数据
EN

Stack Overflow用户
提问于 2011-04-06 02:52:50
回答 1查看 474关注 0票数 0

可能重复:

How to downsize std::vector?

std::vector似乎不会释放内存,即使我调用了pop_back()clear()resize()

有什么好办法来处理这件事吗?例如,在以下代码中:

代码语言:javascript
运行
复制
#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;
}

向量在完成之前不会释放任何内存。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-06 02:56:54

std::vector成长,但从不收缩。原因是成长是昂贵的,所以如果你收缩,然后又长回来,那是对性能的浪费。

如果您真的想缩小一个大向量,请使用交换成语:

代码语言:javascript
运行
复制
std::vector<T> vec;
// push push push ...
std::vector<T>(vec).swap(vec);

这并不能保证vec的新大小恰好是其元素大小的总和,但它应该是接近的。而且,C++0x的std::vector将有一个shrink_to_fit()成员,可以大致做到这一点。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5560949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档