Bootstrap

CPP - 清空vector

vector中一般是三个指针:

  • begin
  • end
  • capacity

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 方式将之清空。

;