[C/C++标准库]_[初级]_[std::deque和std::vector比较]

本文对比了C++中std::deque和std::vector的特性,包括存储方式、插入删除效率、时间复杂度。deque适合头尾快速操作,不连续存储,扩展代价小;vector连续存储,随机访问更快,但插入删除可能导致引用失效。两者在多线程环境下均不安全,并共享一些基本操作。示例展示了两者在push_back和erase操作上的差异。
摘要由CSDN通过智能技术生成

std::deque 特性

  1. 双向队列,队列意味着存储方式不一样,deque不是连续存储的.
  2. 允许在头尾快速插入或删除,对其他位置的引用对象无影响,不会有copy 发生.(注意,是引用对象,不是指针,指针不需要copy)
  3. 内部存储会根据需要自动扩展,扩展的代价比vector少很多,因为不会创建新的内存并复制引用.
  4. 时间复杂度:
    1) 随机访问. O(1)
    2) 插入和移除头尾元素. O(1)
    3) 插入和移除非头尾元素. O(n)

std::vector 特性

  1. 存储是连续的,因此可以通过枚举或者元素+偏移量来访问,因为Random Access比deque快.
  2. 内部存储也是根据需要自动扩展的,但是相对静态数组它扩展并非是一个个扩展,而往往是预测扩展多个空间满足以后的添加需要. 当size()> capacity()时会自动扩展,因此在创建vector后,如果能通过reverse来设置容量会提高性能,减少碎片.
    扩展时和是否在头尾插入无关.
  3. 只要capacity改变,引用和iterator全部失效,会导致重新copy. (注意,是引用对象,不是指针,指针不需要copy)
  4. 时间复杂度:
    1) 随机访问. O(1)
    2) 插入和移除尾部元素. amortized O(1)
    3) 插入和移除非尾部元素. linear in distance to the end of the vector O(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peter(阿斯拉达)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值