C++---deque双端队列

deque

deque双端队列,是C++,STL标准模板库中提供的一种容器。

什么是双队列
队列:是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
故名思意:双端队列就是,在队列的前端与后端都可以进行插入删除操作。

双端队列的底层结构

C++---deque双端队列
底层为每个结点都申请了一份空间。

双端队列底层是一个假象的连续空间,实际上是分段存储的,我们平时在使用双端队列的时候发现与数组一样,根本没有感觉到是分段存储的,这是由于其在底层将迭代器进行改进。

迭代器 作用
begin/end begin:容器起始位置,end:容器最后一个元素的下一个位置
rbegin/end 反向迭代器,rbegin:最后一个元素的下一个位置,rend:起始位置
cbegin/cend const类型迭代器,位置与begin/end相同
crbegin/crend const类型迭代器,位置与rbegin/rend相同

rbegin/rend其实就是将end/begin迭代器进行的封装。

C++---deque双端队列

迭代器工作原理:
C++---deque双端队列

常用接口

deque官方接口

  • 构造
函数声明 接口说明
deque() 构造空双向队列
deque(const deque& d) 拷贝构造双向队列
deque(size_t size,int val) 用size个值为val的元素构造双端队列
deque(iterator first,iterator last) 区间构造
  • 迭代器
函数声明 接口说明
begin(),end() begin:容器起始位置 end最后一个元素下一个位置
rbegin(),rend() 反向迭代器rbegin在end位置,rend在begin
cbegin(), cend() const迭代器,与begin和end位置相同,但不能修改其空间内容
crbegin(), crend() const反向迭代器,与crbegin在cend位置,crend在cbegin位置
  • 容量操作
函数声明 接口说明
size() 返回deque中有效元素个数
empty() 检测deque是否为空
resize(size,val) 将deque中的元素改变到size,多出的空间用val填充
  • 修改操作
push_back() 和 pop_back() deque的尾插和尾删
push_front() 和 pop_front() deque任意位置插入和删除
insert(pos, value) 在pos位置中插入value
erase(pos) 删除deque头部元素
swap() 交换两个deque中的内容
将deque中的元素清空

C++---deque双端队列