C++ 之 queue、stack、dueque队列

queue


queue队列,特点是先进先出,类似于排队,先排的人先用。它长用于模仿队列,在算法中比较常用的是单调队列算法。

定义结构: queue<数据类型> 变量名

c 复制代码
#include <queue>

queue<int> q1;
queue<double> q2;
queue<结构体类型> q3;

常用函数:

  • empty 检测队列是否为空
  • size 返回队列元素的个数
  • push 在队列末尾插入元素
  • pop 删除队列的第一个元素
  • front 返回队列的第一个元素

示例代码:

c++ 复制代码
#include <iostream>
#include <queue>
using namespace std;

int main() {
	queue<int> values;
	// 插入元素
	for(int i = 0; i < 5; ++i) {
		values.push(i);
	}
	cout << "元素个数:" << values.size() << endl;
	return 0;
}

queue队列中的数据因为先进先出 ,不能通过下标访问或随机访问,且队列内的元素无法遍历

如果一定要遍历,可以先pop然后再push进行

c++ 复制代码
#include<iostream>
#include<queue>
 
using namespace std;
int main(int argc, char* argv[]) {

  queue<int> myqueue;
  myqueue.push(1);
  myqueue.push(2);
  myqueue.push(3);

  //myqueue_size 必须是固定值
  int myqueue_size = myqueue.size();
  for(int i = 0; i < myqueue_size; i++) {   
    cout << myqueue.front() << endl;
    myqueue.push(myqueue.front());
    myqueue.pop();
  } 
}

Stack


stack堆栈,特点是先进后出,与queue相反。

定义结构:stack<数据类型> 变量名

c 复制代码
#include <stack>

stack<int> s1;
stack<double> s2[5];

常用函数与queue类似:

常用函数:

  • empty 检测堆栈是否为空
  • size 返回堆栈元素的个数
  • push 在堆栈末尾插入元素
  • pop 删除堆栈的第一个元素
  • front 返回堆栈的第一个元素

使用例子与queue类似

c 复制代码
#include <iostream>
#include <stack>
using namespace std;

int main() {
	stack<int> values;
	// 插入元素
	for(int i = 0; i < 5; ++i) {
		values.push(i);
	}
	cout << "元素个数:" << values.size() << endl;
	return 0;
}

且不能通过下标访问或随机访问,且队列内的元素无法遍历

dueque


deque 双向队列,特点是可以在队列的两端进行元素的操作,并且可以高效的在队列的任意位置进行元素的插入和删除。

它几乎涵盖了queue队列(先进先出),stack堆栈(先进后出),vector等全部用法,功能十分强大。

定义结构: deque<数据类型> 变量名

c 复制代码
#include <deque>

deque<int>d1; //定义一个储存数据类型为int的双端队列d1 
deque<double>d2; //定义一个储存数据类型为double的双端队列d2 
deque<string>d3; //定义一个储存数据类型为string的双端队列d3 
deque<结构体类型>d4; //定义一个储存数据类型为结构体类型的双端队列d4 
deque<int> d5[N]; //定义一个储存数据类型为int的双端队列数组d5 

常用函数:

  • empty 检测队列是否为空

  • size 获取队列元素个数

  • font 返回队列头部元素引用

  • push_back/emplace_back 队列的尾部插入元素

  • pop_back 删除队列尾部元素

  • pop_front 删除队列头部元素

  • clear 清空队列所有元素

  • begin/end 返回头部/尾部+1的迭代器

  • rbegin/rend 返回尾部/头部-1的迭代器

  • insert/erase 指定位置插入/删除元素

c 复制代码
#include <iostream>
#include <deque>
using namespace std;

int main() {
	deque<int> values;
	for(int i =0; i < 5; ++i) {
		values.push_back(i);
	} 
	cout << "元素个数" << values.size() << endl;
	
	// 遍历元素,可以通过下标,迭代器,foreach等
	deque<int>::iterator iter;
	for(iter = values.begin(); iter != values.end(); iter++) {
		cout << *iter << "";
	}
	for(int i=0; i<values.size(); ++i){
		cout << values[i] << "";
	}
}
相关推荐
AC赳赳老秦13 分钟前
采集行为合规自检:OpenClaw 自动校验 robots 协议与采集频率,规避违规采集风险
java·开发语言·c++·python·php·deepseek·openclaw
无名猿33 分钟前
C++ 查找算法:std::find 与容器成员 find 的性能差距
c++·性能优化·stl·标准库
程序猿编码1 小时前
工业视觉多任务方案:可编程梯度信息视觉框架,训练评估 + C++ 部署完整实战
开发语言·c++·视觉·推理引擎
朝朝辞暮i2 小时前
C++ 第 21 课:struct —— 把一组相关数据打包在一起
开发语言·c++·算法
SHARK_pssm3 小时前
【C++——类和对象(下)】
开发语言·c++·经验分享·笔记
汉克老师4 小时前
GESP2026年9月认证C++二级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程
沫璃染墨4 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
可乐ea6 小时前
GitHub Security Lab 开源 Fuzzing Taskflow:让 LLM 智能体自己跑完 C/C++ 模糊测试
jvm·c++·github·模糊测试·mcp·代码agent·智能体自动化
朝朝辞暮i6 小时前
C++ 第 13 课:值传递 —— 为什么函数里改了,外面却没变?
java·c++·算法
无忧.芙桃7 小时前
C++语言原理与实践(十):vector类的底层实现
开发语言·c++·算法