最近看到一篇关于STL vector内存释放的文章,觉得写得很好,链接如下:STL vector 内存释放 - youxin - 博客园
std::vector<int> sv;
sv.push_back(10);
sv.push_back(20);
sv.push_back(30);
cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl;
// size 是 3, capacity 也是 3
sv.erase(sv.begin()); //删掉一个
cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl; //the size is 2, the capacity is 3
size虽然缩小了,但是capacity没有缩小,说明erase()函数只是删除了元素,并没有释放vector空间
sv.clear();
cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl; // the size is 0, the capacity is 3
所有元素都被clear()删除了,但是没有释放vector空间。vector此时像个空箱子
sv.push_back(10);
sv.push_back(20);
sv.push_back(30);
sv.resize(0);
cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl; // the size is 0, the capacity is 3
//resize()函数没有释放空间
sv.push_back(10;
sv.push_back(20);
sv.push_back(30);
std::vector<int>().swap(sv);
cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl; // the size is 0, the capacity is 0
//swap()函数成功释放了空间。它使vector离开了原来的作用域,导致空间被释放。
sv.push_back(10);
sv.push_back(20);
sv.push_back(30);
sv.resize(0);
sv.shrink_to_fit();
cout<<”size: “<<sv.size()<<”; capacity: “<<sv.capacity()<<endl; // the size is 0, the capacity is 0
shrink_to_fit()函数作用为使capacity等于size大小,当size为0时,调用此函数也可以释放空间。
vector创建二维数组,以int类型为例:
创建4行3列数组
vector<vector<int> > array;
array.resize(4);
for (int i=0; i<4; ++i)
{
array[i].resize(3);
}