当前位置: 首页 > news >正文

【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的特点包括:

  1. 可以在队列的任一端进行插入和删除操作,也就是说可以在队列的前端(头部)和后端(尾部)进行操作。
  2. deque的大小可以动态调整,可以根据需要增加或减少元素。
  3. deque中的元素在内存中是连续存储的,这使得访问元素的速度比较快。
  4. 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的使用

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 一、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. 在每个树行中找最大值 首先是遍历每层的节点&#xff0c;将每一层最大值的节点的值保留下来&#xff0c;最后将所有层的最大值的表返回&#xff1b;具体的遍历每层节点的过程如上一篇故事&#xff1b; 综上所述&#xff0c;代码如下&#xff1a; /*** Definition …...

记录一次CTF图片拼图安装工具montage+gaps成功步骤以及踩坑全过程

安装图片拼接工具montage&#xff1a; 1.安装 使用pip install montage无法安装montage工具的师傅可以尝试下面的方法 #Debian apt-get install graphicsmagick-imagemagick-compat#Ubuntu apt-get install graphicsmagick-imagemagick-compat#Alpine apk add imagemagick6#…...

深入剖析人才管理的关键要素:“选、用、育、留”四大核心要素

在当今这个日新月异的商业时代&#xff0c;企业的成功不再仅仅取决于资金、技术或市场策略&#xff0c;而更多地依赖于企业所拥有的人才资源。有效的人才管理策略&#xff0c;尤其是“选、用、育、留”四大核心要素&#xff0c;已成为推动企业持续发展的关键。 一、选&#xff…...

【C++】类的默认成员函数

类的默认成员函数 类的六个默认成员函数构造函数构造函数的概念构造函数的特性 析构函数析构函数的概念析构函数的特性 构造函数与析构函数的调用顺序拷贝构造拷贝构造的概念拷贝构造的特性赋值运算符重载运算符重载赋值运算符重载前置与后置重载输入输出流重载 const修饰成员实…...

归并排序!

归并排序 https://articles.zsxq.com/id_g23e5o3lg87e.html 目录 归并排序算法思想命名由来算法描述sortList函数mergeSort函数 源代码 算法思想 通过将当前乱序的数组分成两个部分&#xff0c;分别进行「递归调用」&#xff0c;利用两个指针将数据元素以此比较&#xff0c;选…...

深入探讨:Spring与MyBatis中的连接池与缓存机制

深入探讨&#xff1a;Spring与MyBatis中的连接池与缓存机制 引言 在现代应用程序开发中&#xff0c;性能优化是一个永恒的话题。而在企业级Java应用开发中&#xff0c;Spring和MyBatis是两种非常流行的框架&#xff0c;它们的连接池和缓存机制对应用程序的性能有着至关重要的…...

[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&#xff0c;TensorRtExtern源码地址&#xff1a;T…...

Linux CFS 调度器 (1):概述

文章目录 1. 前言2. CFS 调度器2.1 概述2.2 一些实现细节2.3 运行队列&#xff1a;红黑树2.4 一些特征2.5 调度策略2.6 调度器类别2.7 扩展&#xff1a;组调度 3. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff…...

HBase中Master初始化错误~

ERROR&#xff1a;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上进行测试&#xff0c;因此给定版本的Hive只能保证与特定版本的Spark一起工作。其他版本的Spark可能与给定版本的Hive一起工作&#xff0c;但不能保证。以下是Hive版本及其对应的Spark版本列表&#xff1a; 详情参考官方文档&#xff1a;http…...

grep命令知多少

引言 1. grep命令的重要性 在Linux系统中&#xff0c;grep是一个不可或缺的文本处理工具&#xff0c;它允许用户快速搜索文件中的文本模式。这个命令的名称来源于Global Regular Expression Print&#xff0c;即全局正则表达式打印&#xff0c;它源自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畅享海量免费歌曲

洛雪音乐助手是一款功能全面且完全免费的开源音乐软件&#xff0c;支持在Windows、Android和iOS平台上使用。 平台支持&#xff1a; 桌面版&#xff1a;采用Electron Vue技术栈开发&#xff0c;支持Windows 7及以上版本、Mac OS和Linux&#xff0c;具有广泛的用户群体覆盖。 …...

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上架应用的开发者来说&#xff0c;尤其是那些矩阵式上架马甲包的开发者&#xff0c;可能已经遭遇过无数次应用被暂停或移除的情况了。通常这种情况下&#xff0c;账号也随之会被封&#xff0c;且大多数开发者认为&#xff0c;没有立马收到封号邮件的话&#x…...

Docker部署MaxKB 知识库(提高问答命中率)

前言 上一篇文章简单的介绍了下MaxKB&#xff0c;这一篇文章就讲如何部署MaxKB。 MaxKB实现逻辑也比较简单&#xff0c;如下图。 安装 修改Docker镜像源 由于不可抗力&#xff0c;部分源已经无法使用&#xff0c;需要修改以下的源地址来拉取镜像。如果是linux&#xff0c;…...

LeetCode739每日温度

题目描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 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…...

正点原子IMX6ULL史诗级新内核Linux7.0移植教程(5)梭哈配置主线设备树

正点原子IMX6ULL史诗级新内核Linux7.0移植教程&#xff08;5&#xff09;梭哈配置主线设备树 仓库已经开源&#xff0c;可以研究补丁和直接看完整教程&#xff1a;https://github.com/Awesome-Embedded-Learning-Studio/imx-forge 有任何意见欢迎提出 PR&#xff01;会第一时间…...

英飞凌AURIX TC3XX GPIO驱动配置与LED呼吸灯实现

1. 认识AURIX TC3XX的GPIO模块 第一次接触英飞凌AURIX TC3XX系列MCU时&#xff0c;我被它强大的GPIO功能惊艳到了。这不仅仅是一个简单的数字输入输出接口&#xff0c;而是集成了多种高级特性的硬件模块。在实际汽车电子项目中&#xff0c;比如氛围灯控制、状态指示灯等场景&a…...

3步轻松上手BepInEx:Unity插件框架新手必备指南

3步轻松上手BepInEx&#xff1a;Unity插件框架新手必备指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一款专为Unity游戏设计的插件框架&#xff0c;能帮助开发者轻…...

SVM支持向量机核函数选择避坑指南:从线性到RBF,如何根据你的数据特征做决定?

SVM核函数选择实战指南&#xff1a;从数据特征到模型调优的全流程解析 第一次在Scikit-learn中调用SVC类时&#xff0c;面对kernel参数下拉菜单里linear、poly、rbf、sigmoid四个选项&#xff0c;我盯着屏幕发了五分钟呆——这感觉就像走进一家高级餐厅&#xff0c;服务员递来一…...

如何快速使用OpCore Simplify:零基础黑苹果的终极配置指南

如何快速使用OpCore Simplify&#xff1a;零基础黑苹果的终极配置指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而烦恼…...

如何用掩码生成蒸馏(MGD)提升小模型性能?实战ResNet-18到ImageNet分类

掩码生成蒸馏实战&#xff1a;如何让ResNet-18在ImageNet上提升1.8%准确率 在模型轻量化的浪潮中&#xff0c;知识蒸馏技术正经历着从简单模仿到特征重构的范式转变。当我们用ResNet-50这样的"大模型"指导ResNet-18等"小模型"训练时&#xff0c;传统方法往…...

Matlab GUI 计时器:基于定时器对象自动更新的数字时钟演示

Matlab图形用户界面计时器&#xff1a;使用定时器对象自动更新的MatlabGUI&#xff0c;一个数字时钟&#xff0c;作为显示基本组件的快速演示&#xff0c;带有一个按钮&#xff0c;用于恢复/暂停执行更新实验室配了新酶标仪孵箱但总有人&#xff08;比如同组摸鱼的小师妹顺便喊…...

如何用QuickRecorder解决macOS录屏痛点:高效专业的从入门到精通实践指南

如何用QuickRecorder解决macOS录屏痛点&#xff1a;高效专业的从入门到精通实践指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitco…...

3个关键步骤:Smiley Sans字体技术优化指南

3个关键步骤&#xff1a;Smiley Sans字体技术优化指南 【免费下载链接】smiley-sans 得意黑 Smiley Sans&#xff1a;一款在人文观感和几何特征中寻找平衡的中文黑体 项目地址: https://gitcode.com/gh_mirrors/smi/smiley-sans 在当今数字化时代&#xff0c;网页性能直…...

深入浅出ESP32蓝牙HID协议:从报文解析到游戏手柄开发

深入浅出ESP32蓝牙HID协议&#xff1a;从报文解析到游戏手柄开发 在物联网设备与人机交互技术深度融合的今天&#xff0c;蓝牙HID协议已成为连接智能硬件与终端设备的重要桥梁。ESP32作为一款集成Wi-Fi和蓝牙双模通信的微控制器&#xff0c;凭借其出色的性价比和丰富的开发资源…...