CPP – 清空vector

  • Post author:
  • Post category:其他


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

方式将之清空。



版权声明:本文为hrbust_cxl原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。