vector中一般是三个指针:
begin ~ capacity为vector的容量,决定了vector在堆上所占的内存大小。
begin ~ end为vector所拥有元素数量。
end指针通过 resize
改变,capacity指针通过 reserve
改变。
但是其中要注意的是,resize在缩小时,不会改变capacity指针。
如果要减小vector所占用的内存,要通过swap的方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream> #include <vector>
using namespace std;
int main() { vector<int> vec; int n; vec.resize(10000); cout << vec.size() << " " << vec.capacity() << endl; vec.resize(1); cout << vec.size() << " " << vec.capacity() << endl; vec.clear(); cout << vec.size() << " " << vec.capacity() << endl; vector<int>(vec).swap(vec); cout << vec.size() << " " << vec.capacity() << endl; }
|
其结果如下:
1 2 3 4 5
| $ ./a.out 10000 10000 1 10000 0 10000 0 0
|
可以发现,clear
是把元素给删掉了,但是vector占用的堆内存还是一样的。这时候就需要用 swap
方式将之清空。