C++学习笔记【顺序容器——vector对象如何增长的】

假设容器中的元素是连续存储的,容器的大小可变,一直向vector中添加元素会出现什么情况:如果空间不够容纳新元素,出于连续存储的特性容器不能简单地把新元素存储到内存的其他位置。容器必须申请一块新的内存,之后把原有元素移动到申请的空间上,再把新元素添加,
最后释放之前的存储空间。实际实现时不可能每添加新元素就执行一次上面的操作。

为了减少这样的情况,一般采用给vector分配更大的内存空间,比如说分配之前空间的两倍。但会出现另一种情况,内存空间扩张速度很快。

在vector中提供了一些成员函数,这使得程序员可以对容器大小进行操作。

Function NameDescription
shrink_to_fit()将capacity()减少为与size()相同大小
capacity()可以保存的元素个数
reverse()分配至少能容纳n个元素的内存空间

注意:reserve不会改变容器中元素的数量,只会影响vector预先分配多大的内存空间。

还需要理解capacity和size的区别。size是指容器已经保存了多少个元素,capacity指在不分配新的内存空间的前提下最多可以保存多少个元素。

capacity的值取决于标准库的实现。

vector<int>vec(16,0);
cout<<"vec:size: "<<vec.size()<<" capacity: "<<vec.capacity()<<endl;
for(int i=0;i<17;++i)
    vec.push_back(i);
cout<<"vec:size: "<<vec.size()<<" capacity: "<<vec.capacity()<<endl;

在这里插入图片描述

可以简单测试一下,就能很快理解capacity和size的区别。而且多测试几遍能发现,capacity大小一直翻倍。

可以调用shrink_to_fit来归还多余的内存。但该函数只是一个请求,标准库不一定会归还内存。

在这里插入图片描述
记住只有在执行insert操作时size与capacity相等的情况下,以及调用resize或reserve时给的大小超过当前capacity,vector才会重新分配内存空间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值