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

相关推荐
OPEN-F5 小时前
C++进阶教程:继承与多态
开发语言·c++
luj_17687 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
刃神太酷啦8 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
带多刺的玫瑰8 小时前
Leecode#9刷题之回文数
数据结构·算法
萌动的小火苗9 小时前
数据结构面试题【无答案】
c语言·开发语言·数据结构·链表
汉克老师11 小时前
CSP-J 初赛(以满分为目标):第十五课《结构体、排序与自定义比较——从“给数字排队”到“给一群人排队”》
c++·csp-j·小学生·学c++编程
tianyu23412 小时前
HashMap 灵魂 30 问:从数据结构到红黑树,从扩容到 ConcurrentHashMap,一篇彻底通关
数据结构·hashmap·hashset·linkedhashmap‌
HugoStudio_SWAN12 小时前
C++ CMD 互动动画:按键触发爆炸效果
开发语言·c++·学习·程序人生
水饺编程12 小时前
第5章,[Win32 章节] :Polygon 函数和多边形填充模式
c语言·c++·windows·visual studio
wuminyu12 小时前
Java FFM处理网络读写事件源码剖析
java·linux·c语言·jvm·c++