vector、list、deque的优缺点

vector、list、deque容器的优缺点

vector:

优点:随机访问,尾部的操作O(1),空间利用率高,不容易造成内存碎片
缺点:中间头部操作O(n),增容代价比较大(深拷贝)每次都要重新开辟一个更大空间进行数据搬移。

list:

优点:任意位置操作性能高,插入删除O(1)
缺点:不支持随机访问,空间利用率比较低(频繁的申请释放),容易造成内容碎片。

deque:

优点:支持随机访问(性能略低于vector),头部尾部的操作O(1),增容的代价小
缺点:中间位置的操作性能比较低:O(n)

stack、queue、priority_queue的默认实现容器

stack:默认实现:deque

堆的实现可以用vector,list,deque
因为stack的实现不需要随机访问,因此vector的优势体现不出来,并且list空间利用率较低。

queue:默认实现:deque

队列的实现可以用list,deque
队列只在头部和尾部操作,因此deque中间操作性能低不受影响。list空间利用率低需要频繁申请释放。

priority_queue:默认实现:vector

优先队列的实现可以用vector,deque
需要容器支持随机访问(因为要实现元素的交换),vector的元素都在连续位置(物理连续),随机访问是O(1)的操作,遍历是O(n)的操作。deque虽然支持随机访问,但是它的性能略低于vector。元素不是完全连续。

对duque双端队列的简要介绍

deque(双端队列):增容代价小
1.数据缓冲区已满,新开一个缓冲区,缓冲区首地址存入指针数组
2.指针数组已满,新开一个指针数组,只需要拷贝原有缓冲区的指针,不需要拷贝元素内容

通俗解释:创建一个指针数组,从中间开始存储,比如chunk1 指向一个数据缓冲区用来存储数据,当进行头插尾插占满该缓冲区后,**再进行头插时,对指针数组进行–,chunk0指向一块新的数据缓冲区用来存储头插操作;再进行尾插时,对指针数组进行++,chunk2指向一块新的数据缓冲区用来存储尾插操作。**当指针数组满了之后,从新开辟一个更大的指针数组,将原先数组内元素copy过去,这样的操作不用进行数据的搬移,只用进行指针的搬移。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值