deque
deque双端队列,是C++,STL标准模板库中提供的一种容器。
什么是双队列
队列:是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
故名思意:双端队列就是,在队列的前端与后端都可以进行插入删除操作。
双端队列的底层结构
底层为每个结点都申请了一份空间。
双端队列底层是一个假象的连续空间,实际上是分段存储的,我们平时在使用双端队列的时候发现与数组一样,根本没有感觉到是分段存储的,这是由于其在底层将迭代器进行改进。
迭代器 | 作用 |
---|---|
begin/end | begin:容器起始位置,end:容器最后一个元素的下一个位置 |
rbegin/end | 反向迭代器,rbegin:最后一个元素的下一个位置,rend:起始位置 |
cbegin/cend | const类型迭代器,位置与begin/end相同 |
crbegin/crend | const类型迭代器,位置与rbegin/rend相同 |
rbegin/rend其实就是将end/begin迭代器进行的封装。
迭代器工作原理:
常用接口
- 构造
函数声明 | 接口说明 |
---|---|
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中的元素清空 |