016【入门】双端队列

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 最常见的用法。

相关推荐
m0_639906944 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
Sakura_j_h_4 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
程序喵大人5 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
jimy17 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
2601_970703838 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
会编程的小孩9 小时前
C++ 定时器
c++
沫璃染墨10 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
揽星河..12 小时前
【C语言】分支和循环
c语言·c++·算法
丘山望岳13 小时前
单调栈和单调队列
数据结构
Fuyo_111913 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法