deque容器

一、deque 双端队列容器

#include <deque>

是下标顺序容器,它允许在首尾两端快速地插入、删除数据

deque的元素不是全部相邻存储的:采用单独分配的固定大小数组的序列存储数据,以及额外的登记表(中控数组),该表中记录了所有序列的地址,这表示通过下标访问元素时必须经过两次指针解引用,vector只需要一次

deque支持随机访问,效率依然是O(1)

deque的内存也可以按需要自动扩展、收缩,并且deque的扩展比vector更优。因为不涉及到复制、销毁环节

1、vector与deque扩容区别

①vector扩容,先申请一块更大的新内存,把原内存数据拷贝,释放原内存

②deque扩容,只需要申请一块新的固定大小的序列,记录到中控数组即可

deque比vector多push_front\pop_front操作,并且效率也能O(1)

vector比deque多个reserve预分配内存,因为deque不需要预分配内存来节约时间

2、deque的优点

①与vector相比,头部插入、删除时,不需要搬运后序元素,效率特别高(O(1));在扩容时,也不需要移动、释放原内存,只需操作中控数组即可

②与list相比,底层依然是连续空间,空间利用率更高,支持随机访问O(1)

3、deque缺点

①没有vector和list那么极致,随机访问的速度比vector慢(vector是真正的连续空间);中间位置的插入、删除没有list快,list根本不需要扩容

②不适合遍历,因为在遍历时deque的迭代器需要频繁地检查是否移动到了某个序列的末尾,并且需要解两次引用,效率低

③因此当需要线性容器时,大多数情况下优先考虑vector、list,deque的应用不多(stack/queue)

二、stack 栈容器(适配器)

#include <stack>

底层由deque实现的

不支持运算符,没有迭代器,只有无参构造、拷贝构造

empty、push、pop、top、size

三、queue 队列容器(适配器)

#include <queue>

底层由deque实现的

不支持运算符,没有迭代器,只有无参构造、拷贝构造

empty、push、pop、front、back、size

四、priority_queue 优先队列容器(适配器)

#include <queue>
1、底层实现

底层采用vector实现,当数据入队时,会对数据调整成堆结构,默认是大顶堆,元素越大,优先级越高,优先出队

注意:存储的元素必须支持 < 运算符,如果是类类型数据必须重载 < 运算符

注意 :只能查看top

2、如何调整优先队列的优先级(小顶堆)

①元素取反存入、取出取反

②类类型数据重载 < 运算符,调整 < 运算符的比较过程

③固定语法

priority_queue<类型, vector<类型>, greater<类型> > 队列名;
//	升序
priority_queue<类型, vector<类型>, less<类型> > 队列名;
//	降序
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值