【c++】deque和vector的区别,相关面试题

deque和vector的区别:

  1. deque两端都可以快速插入和删除元素。O(1)
    vector只有尾部插入元素时为O(1)
  2. deque的元素存取和迭代器相比会慢一点,因为deque的内部结构多了一个间接的过程。(vector的支持数组的随机访问;而deque虽然也是支持使用[]的运算符,但实际上是需要通过中央控制器二次寻址的,效率比vector略低。)
  3. deque的迭代器是特殊的智能指针,而不是一般的指针,它需要在不同的区之间跳转,因为deque不止一块内存。
  4. deque不支持容量和内存重分配时机的控制,除了首尾两端 安插和删除元素外,其他地方插入和删除元素都会导致迭代器失效。不过deque 内存重分配机制优于vector,因为deque不必在内存重分配时,复制所有的元素。
  5. deque的内存区块不再被使用时,会被释放。
  6. vector适用于对容器中元素进行频繁的访问的情况;而deque的适用于元素的频繁访问,并且在数据需要在头部和尾部进行插入和删除的情况。
  • 请描述deque和vector对存储空间管理的不同?
  1. deque的底层是“中央控制区”和缓冲的结构。而vector是数组。
  2. vector在空间不够重新申请新空间策略是先申请一块比原来空间大的空间(1.5倍或两倍)将原来的数据拷贝一份到新的空间中,然后将原来的空间的释放;而deque的策略是申请一块固定大小(默认大小:512bytes)的空间,然后将该空间的地址存放在中央控制器中,并没有数据拷贝和空间的释放的过程,所以扩容时deque的效率要高于vector。

  • 为什么STL的stack和queue额适配器默认优先使用deque而不是vector和list?
  1. stack适配deque相较于适配vector的优势:扩容代价不大,不需要拷贝数据浪费空间也不多。
  2. stack适配deque相较于适配list的优势:CPU高速cache命中。 其次不会频繁申请小块空间。申请和释放空间次数少代价低(支持随机访问)
  3. queue适配deque相较于适配list的优势:CPU高速cache命中。 其次不会频繁申请小块空间。申请和释放空间次数少代价低。

缺点:

deque适合头尾插入删除,但是中间插入删除、和随机访问效率都差强人意。所以要高频随机访问还得是vector,要任意位置插入删除,还得是list。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值