【C++】stack、queue和deque的使用
💗个人主页💗
⭐个人专栏——C++学习⭐
💫点击关注🤩一起学习C语言💯💫
目录
导读
一、stack
1. stack介绍
2. stack使用
二、queue
1. queue介绍
2. queue使用
三、deque
1. deque介绍
2. deque的迭代器
3. deque使用
四、三者关系
1. STL标准库中stack和queue的底层结构
导读
今天我们主要来了解stack、queue、和deque的一些基本使用,下次再来说下他们的模拟实现。
其中栈和队列我们在数据结构部分就已经用C来实现了一遍,大家有兴趣的可以点进主页。
一、stack
1. stack介绍
Stack,中文翻译为"栈",是一种数据结构,在计算机科学中经常被使用。Stack的特点是先进后出(LIFO,Last In First Out),它只允许在一端进行插入和删除操作,这一端被称为栈顶。
具体的流程大姐可以点进这个链接:http://t.csdnimg.cn/OxrHQ
2. stack使用
- 使用stack类时,需要包含<stack>头文件。
- 栈中存储的元素类型可以是任意的,不仅限于整数类型。
- 栈的大小没有限制,可以根据需要动态调整。
- 在使用top()或pop()操作时,要确保栈不为空,否则会导致未定义行为。
#include <iostream>
using namespqce std;
#include <stack>
int main()
{//定义栈对象:stack<int> st;// 创建一个空的整数类型栈//入栈操作:st.push(1);st.push(2);st.push(3);st.push(4);while (!st.empty()){cout << st.top() << " ";//获取栈顶元素//出栈st.pop();}cout << endl;return 0;
}
二、queue
1. queue介绍
queue(队列)是一种先进先出(FIFO,First-In-First-Out)的数据结构,其中元素按照加入队列的顺序进行处理。
队列有两个基本操作:入队(enqueue)和出队(dequeue),分别指元素加入队列和从队列中移除元素。
除此之外,队列还提供了一些其他的操作,如获取队首元素、判断队列是否为空等。
具体的图解点击:http://t.csdnimg.cn/OxrHQ
2. queue使用
- 使用queue类时,需要包含<queue>头文件。
- 队列中存储的元素类型可以是任意的,不仅限于整数类型。
- 队列的大小没有限制,可以根据需要动态调整。
- 在使用front()、pop()操作时,要确保队列不为空,否则会导致未定义行为。
#include <iostream>
using namespace std;
#include <queue>
int main()
{//定义队列对象:queue<int> q;//创建一个空的整数类型队列//入队操作q.push(1);q.push(2);cout << q.front() << " ";//获取队首元素q.pop();// 出队q.push(3);q.push(4);while (!q.empty())//判空{cout << q.front() << " ";q.pop();}cout << endl;return 0;
}
三、deque
1. deque介绍
deque(双端队列)是一种能够在两端进行操作的数据结构。
deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组。
它既可以在前端进行插入和删除操作,也可以在后端进行插入和删除操作。
deque的特点包括:
- 可以在队列的任一端进行插入和删除操作,也就是说可以在队列的前端(头部)和后端(尾部)进行操作。
- deque的大小可以动态调整,可以根据需要增加或减少元素。
- deque中的元素在内存中是连续存储的,这使得访问元素的速度比较快。
- deque不需要预留内存空间,可以根据需要动态分配内存。
deque与vector相似,但deque具有更高的插入和删除元素的性能,因为它允许在队列的两端进行操作。但与之相比,deque的随机访问性能略低,因为deque中的元素并不是像vector那样在内存中是连续存储的。
2. deque的迭代器
双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落在了deque的迭代器身上,因此deque的迭代器设计就比较复杂。

int main()
{deque<int> mydeque = { 1, 2, 3, 4, 5 };for (deque<int>::iterator it = mydeque.begin(); it != mydeque.end(); ++it) {cout << *it << " ";}cout << endl;return 0;
}
3. deque使用
#include <iostream>
using namespace std;
#include <deque>int main()
{deque<int> myDeque; // 创建一个整数类型的双端队列// 在前端插入元素myDeque.push_front(3);myDeque.push_front(2);myDeque.push_front(1);// 在后端插入元素myDeque.push_back(4);myDeque.push_back(5);myDeque.push_back(6);// 打印双端队列的元素cout << "双端队列元素: ";for (auto element : myDeque) {cout << element << " ";}cout << endl;// 删除前端元素myDeque.pop_front();// 删除后端元素myDeque.pop_back();// 获取前端元素int frontElement = myDeque.front();cout << "前端元素: " << frontElement << endl;// 获取后端元素int backElement = myDeque.back();cout << "后端元素: " << backElement << endl;// 获取双端队列大小int dequeSize = myDeque.size();cout << "双端队列大小: " << dequeSize << endl;// 判断双端队列是否为空bool isEmpty = myDeque.empty();cout << "是否为空? " << (isEmpty ? "Yes" : "No") << endl;return 0;
}
四、三者关系
1. STL标准库中stack和queue的底层结构
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配 器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque。

相关文章:
【C++】stack、queue和deque的使用
💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读 一、stack 1. stack介绍 2. stack使用 二、queue 1. queue介绍 2. queue使用 三、deque 1. deque介绍 2. deque的…...
通过SSH远程登录华为设备
01 进入系统编辑视图 system-view Enter system view, return user view with return command. 02 创建本地RSA密钥对 [HUAWEI]rsa local-key-pair creat The key name will be:HUAWEI_Host The range of public key size is (2048 ~ 2048). NOTE: Key pair generation will ta…...
算法day27
第一题 515. 在每个树行中找最大值 首先是遍历每层的节点,将每一层最大值的节点的值保留下来,最后将所有层的最大值的表返回;具体的遍历每层节点的过程如上一篇故事; 综上所述,代码如下: /*** Definition …...
记录一次CTF图片拼图安装工具montage+gaps成功步骤以及踩坑全过程
安装图片拼接工具montage: 1.安装 使用pip install montage无法安装montage工具的师傅可以尝试下面的方法 #Debian apt-get install graphicsmagick-imagemagick-compat#Ubuntu apt-get install graphicsmagick-imagemagick-compat#Alpine apk add imagemagick6#…...
深入剖析人才管理的关键要素:“选、用、育、留”四大核心要素
在当今这个日新月异的商业时代,企业的成功不再仅仅取决于资金、技术或市场策略,而更多地依赖于企业所拥有的人才资源。有效的人才管理策略,尤其是“选、用、育、留”四大核心要素,已成为推动企业持续发展的关键。 一、选ÿ…...
【C++】类的默认成员函数
类的默认成员函数 类的六个默认成员函数构造函数构造函数的概念构造函数的特性 析构函数析构函数的概念析构函数的特性 构造函数与析构函数的调用顺序拷贝构造拷贝构造的概念拷贝构造的特性赋值运算符重载运算符重载赋值运算符重载前置与后置重载输入输出流重载 const修饰成员实…...
归并排序!
归并排序 https://articles.zsxq.com/id_g23e5o3lg87e.html 目录 归并排序算法思想命名由来算法描述sortList函数mergeSort函数 源代码 算法思想 通过将当前乱序的数组分成两个部分,分别进行「递归调用」,利用两个指针将数据元素以此比较,选…...
深入探讨:Spring与MyBatis中的连接池与缓存机制
深入探讨:Spring与MyBatis中的连接池与缓存机制 引言 在现代应用程序开发中,性能优化是一个永恒的话题。而在企业级Java应用开发中,Spring和MyBatis是两种非常流行的框架,它们的连接池和缓存机制对应用程序的性能有着至关重要的…...
[C#]使用C#部署yolov10的目标检测tensorrt模型
【测试通过环境】 win10 x64vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll,TensorRtExtern源码地址:T…...
Linux CFS 调度器 (1):概述
文章目录 1. 前言2. CFS 调度器2.1 概述2.2 一些实现细节2.3 运行队列:红黑树2.4 一些特征2.5 调度策略2.6 调度器类别2.7 扩展:组调度 3. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失ÿ…...
HBase中Master初始化错误~
ERROR:org.apache.hadoop.hbase.PleaseHoldException:Master is initializing 1、停止HBase运行 2、启动zookeeper中的zkCli.sh服务 ./zookeeper/bin/zkCli.sh 3、执行完毕显示以下结果,删除habse文件夹 4、重新启动HBase即可。...
Hive on Spark版本兼容性
Hive on Spark仅在特定版本的Spark上进行测试,因此给定版本的Hive只能保证与特定版本的Spark一起工作。其他版本的Spark可能与给定版本的Hive一起工作,但不能保证。以下是Hive版本及其对应的Spark版本列表: 详情参考官方文档:http…...
grep命令知多少
引言 1. grep命令的重要性 在Linux系统中,grep是一个不可或缺的文本处理工具,它允许用户快速搜索文件中的文本模式。这个命令的名称来源于Global Regular Expression Print,即全局正则表达式打印,它源自UNIX早期的ed文本编辑器。…...
[java]windows和linux下jdk1.8安装包所有版本系列下载地址汇总
【windows jdk1.9系列下载地址】 序号java版本下载地址1java-jdk9-jdk-9.0.1-windows-x64-bin.zip点我下载 【windows jdk1.8系列下载地址】 序号java版本下载地址1java-jdk1.8-jdk-8u202-windows-x64.zip点我下载2java-jdk1.8-jdk-8u201-windows-x64.zip点我下载3java-jdk1…...
Electron+Vue开源软件:洛雪音乐助手V2.8畅享海量免费歌曲
洛雪音乐助手是一款功能全面且完全免费的开源音乐软件,支持在Windows、Android和iOS平台上使用。 平台支持: 桌面版:采用Electron Vue技术栈开发,支持Windows 7及以上版本、Mac OS和Linux,具有广泛的用户群体覆盖。 …...
CAPL通过addTimeToMeasurementStartTime或者getLocalTime获取本地时间
文章目录 getLocalTimeaddTimeToMeasurementStartTimegetLocalTime long tm[9]; getLocalTime(tm); // now tm contains the following entries: // tm[0] = 3; (seconds) // tm[1] = 51; (minutes) // tm[2] = 16; (hours)...
谷歌上架,APP被移除了,没封号,换个包名还能重新提审上架?
对于在Google Play上架应用的开发者来说,尤其是那些矩阵式上架马甲包的开发者,可能已经遭遇过无数次应用被暂停或移除的情况了。通常这种情况下,账号也随之会被封,且大多数开发者认为,没有立马收到封号邮件的话&#x…...
Docker部署MaxKB 知识库(提高问答命中率)
前言 上一篇文章简单的介绍了下MaxKB,这一篇文章就讲如何部署MaxKB。 MaxKB实现逻辑也比较简单,如下图。 安装 修改Docker镜像源 由于不可抗力,部分源已经无法使用,需要修改以下的源地址来拉取镜像。如果是linux,…...
LeetCode739每日温度
题目描述 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 解析 每次往栈中…...
【Qt】Qt中的几种Timer
1. QObject::startTimer int QObject::startTimer(int interval, Qt::TimerType timerType Qt::CoarseTimer) int QObject::startTimer(std::chrono::milliseconds time, Qt::TimerType timerType Qt::CoarseTimer)每次时间到了会调用虚函数timerEvent() 2. QTimer 3. QBa…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
Python 解释器安装全攻略(适用于 Linux / Windows / macOS)
目录 一、Windows安装Python解释器1.1 下载并安装Python解释1.2 测试安装是否成功1.3 设置pip的国内镜像------永久配置 二、macOS安装Python解释器三、Linux下安装Python解释器3.1 Rocky8.10/Rocky9.5安装Python解释器3.2 Ubuntu2204/Ubuntu2404安装Python解释器3.3 设置pip的…...
【Go语言基础【6】】字符串格式化说明
文章目录 零、格式化常用场景一、Go 字符串格式化核心概念二、常用格式化占位符1. 整数类型2. 浮点数类型3. 字符串与布尔类型4. 指针与通用类型 三、宽度与精度控制1. 宽度控制2. 精度控制(浮点数/字符串) 零、格式化常用场景 数值转字符串:…...
