cpp源码STL之vector中push_back的时间复杂度分析

先说结论

最好是O(1),最差是O(n), 均摊是O(1)。

最好的情况,就是插入的时候,还有空余;最坏的情况,就是每次插入都满了,要重新分配内存。

均摊复杂度,先看一下定义

对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时
间复杂度比较高,而且这些操作之间存在前后连贯的时序关系,这个时候,我们就可以将这
一组操作放在一块儿分析,看是否能将较高时间复杂度那次操作的耗时,平摊到其他那些时
间复杂度比较低的操作上。

推导

在这里插入图片描述

在这里插入图片描述

这里就是按照定义,对插入九个数的过程进行了分析,其中当插入的空间不够时,会重新分配两倍的大小内存,详细解释,查看参考博客。

其中,不等号是进行了缩放,假设全部数量为1,然后有logn次的重新分配内存。

对等比数列求和使用了公式,
在这里插入图片描述

参考博客:
求和公式
tamu大学的教育课件
STL中push_back的详细过程
push_back源码剖析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值