vector动态数组,大小是只增不减的,若容量不够时,会成倍扩容,但不管是erase还是clear只是删除vector中的元素,容量大小并不会变,所以会存在容量很大,但实际存储的数据很少,造成空间浪费,此时就可以利用swap巧妙地收缩空间,并且元素储存的元素保持不变。
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int>v;
cout << "初始vector大小:" << v.capacity() << endl;
v.push_back(1);
v.push_back(1);
v.push_back(1);
v.push_back(1);
v.push_back(1);
v.push_back(1);
cout << "现在vector大小:" << v.capacity() << endl;
v.erase(v.begin());
v.erase(v.begin());
v.erase(v.begin());
v.erase(v.begin());
cout << "erase后swap前vector大小:" << v.capacity() << endl;
{
vector<int>v2(v);
v.swap(v2);
}//用大括号是为了让v2出括号就析构,修整空间
//若此时vector为空 则可以直接vector<int>().swap(v)释放内存; 此时v的容量直接清0
cout << "swap后vector大小:" << v.capacity() << endl;
getchar();
}