vector的内存占用空间不会随着clear()和erase()方法的调用而减少,元素虽然去除但是内存空间只有在vector析构的时候才能被系统回收。像resize()方法如果缩小大小,虽然后续的元素无法被访问了,但内存空间也没有被释放。
其实如果需要空间动态缩小,可以用deque。
那么在不调用析构函数的情况下怎么释放vector的内存呢。
swap方法可以交换两容器的内容。
1 | arr1.swap(arr2); |
这可以用来收缩内存空间,
1 | vector<int>(v).swap(v); |
首先vector(v)利用拷贝构造函数创建了一个匿名对象,拥有全部的数据但没有空闲的空间。之后通过调用swap交换了v与匿名类的内容。
该语句执行完毕后匿名对象被析构,空间自动释放,达到了我们想要的效果。