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] << "";
	}
}
相关推荐
一只旭宝1 天前
【C++入门精讲22】常见设计模式
c++·设计模式
c++之路1 天前
Bazel C++ 构建系列文档(三):构建第一个 C++ 项目
开发语言·c++
旖-旎1 天前
《LeetCode 695 岛屿的最大面积 FloodFill DFS 解法》
c++·算法·力扣·深度优先遍历·floodfill
森G1 天前
61、信号与槽机制在 TCP 编程中的应用---------网络编程
网络·c++·qt·网络协议·tcp/ip
syagain_zsx1 天前
STL 之 vector 讲练结合
c++·算法
牛油果子哥q1 天前
STL set与map底层精讲,红黑树适配原理、有序去重特性、迭代器遍历、API实战与面试核心考点全解
开发语言·数据结构·c++·面试
奇妙方程式1 天前
2026年第九届GXCPC广西大学生程序设计大赛(热身赛)题解
c++·编程比赛·编程竞赛·gxcpc
Tian_Hang1 天前
C++原型模式(Protype)
开发语言·c++·算法
FL16238631291 天前
[cmake]基于C++使用纯opencv部署ppocrv5v6的onnx模型
开发语言·c++·opencv
玖玥拾1 天前
C/C++ 数据结构(六)链表迭代器与底层
c语言·数据结构·c++·链表·stl库