0%

怎么不析构就置vector的capacity为0

vector的内存占用空间不会随着clear()和erase()方法的调用而减少,元素虽然去除但是内存空间只有在vector析构的时候才能被系统回收。像resize()方法如果缩小大小,虽然后续的元素无法被访问了,但内存空间也没有被释放。
其实如果需要空间动态缩小,可以用deque。
那么在不调用析构函数的情况下怎么释放vector的内存呢。

swap方法可以交换两容器的内容。

1
arr1.swap(arr2);

这可以用来收缩内存空间,

1
vector<int>(v).swap(v);

首先vector(v)利用拷贝构造函数创建了一个匿名对象,拥有全部的数据但没有空闲的空间。之后通过调用swap交换了v与匿名类的内容。
该语句执行完毕后匿名对象被析构,空间自动释放,达到了我们想要的效果。