C++ STL 里面有双端队列(deque),头文件是:
#include <deque>
定义:
deque<int> q;
它可以在队头和队尾进行插入、删除。
常用函数:
1. 两端插入
q.push_back(x); //尾部插入
q.push_front(x); //头部插入
例如:
deque<int> q;
q.push_back(2);
q.push_front(1);
//q里面是 1 2
2. 两端删除
q.pop_back(); //删除尾部
q.pop_front(); //删除头部
3. 访问元素
q.front(); //访问队头
q.back(); //访问队尾
例如:
cout << q.front();
cout << q.back();
4. 获取大小
q.size();
5. 判断为空
q.empty();
6. 像数组一样访问
deque支持随机访问:
q[0];
q[1];
例如:
for(int i=0;i<q.size();i++)
{
cout<<q[i]<<" ";
}
7. 清空
q.clear();
和 queue 的区别:
| 容器 | 头部操作 | 尾部操作 | 随机访问 |
|---|---|---|---|
| queue | √ | √ | × |
| deque | √ | √ | √ |
所以:
- 只需要先进先出 →
queue - 需要两头操作 →
deque - 单调队列、滑动窗口最大值 → 经常用
deque
比如单调队列:
deque<int> q;
while(!q.empty()&&a[q.back()]<=a[i])
q.pop_back();
q.push_back(i);
这是算法题里 deque 最常见的用法。