admin管理员组文章数量:1611923
文章目录
- 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是清不掉的
版权声明:本文标题:说清vector的扩容及size capacity问题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728619922a1166220.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论