向量扩容问题

对于容器类中的向量vector要注意以下几点:

容器类的push_back()成员函数会调用对象的复制构造函数复制该对象,然后将复制后的对象添加到容器中。所以如果添加到向量中的是一个类对象,那么它是复制后的对象。

向量扩容时所做的工作)将2个类对象添加到已有的3个类对象的向量中时,向量首先申请到一个足以容纳5个类对象的内存块,得到这个内存块后,将旧内存块中的3个元素复制到这个新分配的内存块中,然后将新增的两个元素放在他们后面,最后将旧内存块中的3个元素所占用的内存释放掉。

但是上面如果旧的元素过多造成资源浪费,所以编译器采用以下优化方法:

优化方法)额外增加新分配的内存空间:一般是增加2倍,初始分配一个对象空间时多分配一倍的空间,这样在往向量中添加一个对象时就不用申请一个新内存块,减少了内存消耗。

 

然后我们就可以理解向量中size()和capacity()方法的区别了。size()永远取得的是在此时本向量中的元素数,而capacity()取得的是没有增加元素前,这个向量所能容纳的元素数目。假设一开始vector里面有3个元素,size()和capacity()都为3(初始化时两者值是一样的)当增加两个元素后。size()变为5,capacity()变为6。在初始化之后,push_back之前,会将空间变为原来的两倍,所以就变为了6.但是当6充满之后,下一次capacity()将会是12。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值