admin管理员组

文章数量:1611902

文章目录

      • 1. vector 扩容
      • 2. capacity和size的意义
      • 3. capacity和size的修改

1. vector 扩容

这个没啥好讲的,就是如果满了就扩一倍。

2. capacity和size的意义

vector的有效区域和实际占用的区域是不一样的,这就是因为扩容的存在。capacity存放的是实际占用的空间,size存放的是可以使用的有效空间

例如我在

vector<int>a(3,1);

后,vector的size是3,capacity也是3,但是如果我此时push_back了一下,结果就不一样了,此时的size会是4,但是capacity会是6,这也是正常的。

如果我继续push,直至size和capacity都是6的情况下再push一次,size就会变成7,capacity会是12。

明白了吧。

3. capacity和size的修改

capacity的容量是不允许下降的,只能增长,而修改的函数是reserver。如果修改后的值比目前容器的值要小,修改就会失效

vector<int>a(3,1);
a.push_back(1);
a.reserve(4);///<这句话没用,此时的size还是4,capacity还是6,往上涨是可以的

size的大小可以直接修改,

vector<int>a(3,1);
a.push_back(1);
a.resize(4);
a.resize(10);

那如果我非要修改capacity的大小呢?比如我很在乎扩容的那部分空间。就要利用vector的拷贝构造函数了。vector的拷贝构造函数只会拷贝有效数据,即size的大小,因此swap一下就可以。或者可以直接将capacity缩小至size的大小,shrink_to_fit()

vector<int>a(3,1);
a.push_back(1);
auto b = a;
swap(b, a);///<再查一下a,已经变了
vector<int>().swap(a);///<这个写法很ne,说是和上面auto+swap效果相同,别的地方也没见过这么写的

clear用于清除size内存,capacity是清不掉的

本文标签: VectorsizeCapacity