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] << "";
	}
}
相关推荐
汉克老师3 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
智者知已应修善业6 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
云泽8087 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
AI进化营-智能译站8 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
Morwit8 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
qeen878 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
图码8 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler019 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy1139 小时前
Linux进程与线程编程详解
linux·c++
A7bert77710 小时前
【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·python·深度学习·yolo·目标检测