即使我致电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;
}
向量在完成之前不会释放任何内存。
答案 0 :(得分:5)
std::vector
增长但从未缩小。原因是增长是昂贵的,所以如果你缩小然后再增长就会浪费性能。
如果你真的想缩小大型矢量,请使用交换习语:
std::vector<T> vec;
// push push push ...
std::vector<T>(vec).swap(vec);
这并不能保证vec
的新大小正好是其元素大小的总和,但它应该是接近的。此外,C ++ 0x的std::vector
将有一个shrink_to_fit()
成员,大致会这样做。