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

Mon*_*lun 0 c++ memory stl vector

可能重复:
如何缩小std :: vector的大小?

似乎std::vector即使我打电话也不会释放记忆pop_back(),clear()或者resize().

有什么好方法可以解决这个问题吗?例如,在以下代码中:

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

wil*_*ell 5

std::vector增长但从未缩小.原因是增长是昂贵的,所以如果你缩小然后再增长它就会浪费性能.

如果你真的想缩小大型矢量,请使用交换习语:

std::vector<T> vec;
// push push push ...
std::vector<T>(vec).swap(vec);
Run Code Online (Sandbox Code Playgroud)

这并不能保证新的大小vec正好是其元素大小的总和,但它应该是接近的.此外,C++ 0x std::vector将有一个shrink_to_fit()大致相同的成员.