【CSP-J系列】双端队列
2026-04-29 20:31:59
发布于:浙江
前言
蒟蒻的markdown用的不好,轻喷。
正题
双端队列就像是普通队列的加强版,使用时要引入头文件 <deque> ,大家都知道,普通的队列只支持从队头入队与从队尾出队。
qu.push(x);//将x入队
qu.pop();//将现在的队尾出队
而双端队列支持队头/尾的出/入队(长难句),也就是四个操作。
dq.push_front(x);//将x从队头入队
dq.push_back(x);//将x从队尾入队
dq.pop_front();//将队头元素出队
dq.pop_back();//将队尾元素出队
打个比方,队列就像是一个马路,普通的是单行道,只能从一边进一边出,而双端队列就是一个双向的路,可以从南到北也可以从北到南。当然,队列中的一些操作在双端队列里也可以使用。
dq.empty();//判断双端队列是否为空
dq.size();//双端队列的元素个数
dq.front();//双端队列的队头
dq.back();//双端队列的队尾
注意: 在调用 front() 与 back() 时要记得判读队列是否为空,不然会RE。
双端队列的遍历
//用迭代器遍历
for (auto it = dq.begin();it != dq.end();it++)
{
cout<<*it<<" ";
}
//用基于范围的for循环
for (const auto &val : dq)
{
cout<<val<<" ";
}
其中的 auto 可以自动切换数据的类型,不用写 deque<int>::iterator 这么长一段。
这里提一嘴,其实 dq[1] 这样的写法也是可以的,但是不推荐大家用。凑字数
例题
哎?我例题呢?
后记
syh有点事所以例题后面补啦,谢谢大家
感谢@古希腊掌管AC和WA的神帮忙修正内容/bx
全部评论 6
- 置顶
bro 为啥不写手写的
1周前 来自 浙江
1讲这个手写的应该很重要吧
1周前 来自 浙江
0我去搜搜,下次写例题的时候补上
1周前 来自 浙江
0bro 最好是自己写,其实也不是很难,就是一个循环队列头指针尾指针加而已
1周前 来自 浙江
0
要不我帮你写(
1周前 来自 浙江
0哦呦
1周前 来自 浙江
0dq.back();双端队列的队尾 这里没有//
1周前 来自 上海
0感谢提醒,已修复
1周前 来自 浙江
0
你敢信这个发帖的 syh J组模拟只考了53.5分...
1周前 来自 浙江
0你敢信这个回复评论的蒟蒻 J 组初赛只考了 49 分...
1周前 来自 浙江
0真的啊?
1周前 来自 浙江
0是的
1周前 来自 浙江
0
怎么感觉写的这么少,大家给我推荐点例题吧,谢谢了
1周前 来自 浙江
0






















有帮助,赞一个