Vector对象是如何增长

  Vector对象是如何增长的:
      为了支持快速访问,vector将元素连续存储。在连续存储的前提下,且容器的大小是可变的,考虑向vector或string中添加元素会发生什么?
    如果没有空间容纳新元素,容器不可能简单地将它添加到内存中其他位置---因为内存必须连续存储。
      容器必须分配新的内存空间来保存已有元素和新元素,将已有元素从旧位置移动到新空间中,然后添加新元素,释放旧存储空间。
      如果我们每次添加一个新元素,vector就执行一次这样的内存分配和释放操作,性能会慢到不能接受。
      为了避免这种代价,标准库采用了可以减少容器空间重新分配次数的策略。当不得不获取新的内存空间时,vector和string的实现通常会
    分配比新的空间需求更大的内存空间。容器预留这些空间作为备用,可用来保存更多新元素,这样,就不需要每次添加新元素都重新分配内存了。
    
    
 
shrink_to_fit()  :  将capacity()减少到和size()相同大小。  搭配clear()使用,可以清空vector所占内存。

reserve(n)  :   分配至少容纳n个元素的内存空间。假设当前size()==24, capacity()==32,调用reserve(50)就会使capacity()大于等于50;
                此时容器最多能容纳大于等于50个元素。如果再占满,添加新元素时,就需要两倍内存分配策略。size()+1,capacity()翻倍!

size()  :  指当前已经保存的元素数目

capacity()  :  指在不分配新内存空间的情况下,容器最多能容纳的元素个数。
                每次在添加新元素时,都以capacity()分配策略往上分配,一般新空间内存大小是当前元素个数的两倍。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值