使用std::vector添加和删除大量数据

Adding and removing large amounts of data with std::vector

本文关键字:删除 数据 添加 std vector 使用      更新时间:2023-10-16

可能重复:
如何缩小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()成员,该成员将大致执行此操作。