C++——STL标准模板库——容器详解——stack+queue

一、基本概念

(一)stack(栈或堆栈)

一种只允许同一端进出的线性数据结构,数据先进后出。基本模型类似于瓶子。

(二)queue(队列) 

一种只允许一端进、另一端出的线性数据结构,数据先进先出。基本模型类似于管道。

二、构造函数

(一)stack构造函数

stack<T>::stack();                                        默认构造函数

stack<T>::stack(initializer _list);                  初始化列表构造

stack<T>::stack(deque<T>&d);                   双端队列构造

stack<T>::stack(deque<T>&&d);                双端队列移动构造

stack<T>::stack(stack<T>&s);                    复制构造

stack<T>::stack(stack<T>&&s);                  移动构造

stack<T,TypeContainer<T>>::stack(TypeContainer&c);        利用基础容器构造堆栈

(二)queue构造函数

queue<T>::queue();                                     默认构造函数

queue<T>::queue(initializer_list);                初始化列表构造

queue<T>::queue(deque<T>&d);                双端队列构造

queue<T>::queue(deque<T>&&d);             双端队列移动构造

queue<T>::queue(queue<T>&q);                复制构造

queue<T>::queue(queue<T>&&q);              移动构造

queue<T,TypeContainer<T>>::queue(TypeContainer&c);        利用基础容器构造队列

三、成员函数

栈和队列的成员函数基本相同,但栈只能访问栈顶元素,队列能访问队头元素还能访问队尾元素,同时,两种容器均自动管理内存,无容量限制;均不允许遍历操作。

1、emplace(T);                在栈顶或者队尾构造元素,避免复制或者移动等操作影响性能

2、empty();                      判断栈或者队列是否为空

3、pop();                          从栈顶出栈或者从队头出队

4、push(T);                      从栈顶入栈或者从队尾入队

5、size();                         返回栈或者队列内元素数量

6、swap();                       交换堆栈或者交换队列

7、stack<T>::top();          访问栈顶元素,返回引用

     queue<T>::front();       访问队头元素,返回引用

     queue<T>::back();       访问队尾元素,返回引用

8、_Get_container();        vs中提供此函数,返回栈或者队列内部基础容器的引用

四、主要用途

(一)stack主要用途

1、函数调用:在程序执行过程中,函数调用通常被存储在堆栈上。这包括函数的参数、局部变量以及返回地址。当函数被调用时,这些信息被推入堆栈;当函数执行完毕时,这些信息被从堆栈中弹出。

2、表达式计算和语句执行:在编译器中,堆栈被用来实现表达式的计算和语句的执行。例如,括号匹配、后缀表达式(逆波兰表示法)等都利用了堆栈。例如计算器的核心实现就是利用堆栈将中缀表达式转换为后缀表达式进行计算,此功能在我另一篇文章中利用链表具体实现——http://t.csdnimg.cn/JBaZ8

3、 图的深度优先搜索:DFS算法

4、递归

5、安全和加密:在某些加密算法中,堆栈被用来存储中间结果或临时数据,以确保这些数据不会被意外修改或泄露。

6、解析和编译:在编译器设计中,堆栈被用来存储语法树的一部分或用于回溯算法,以确保正确的语法分析。

7、操作系统:进程切换和系统调用处理通常使用堆栈存储和恢复状态信息。

(二)queue主要用途

1、多线程编程中的任务调度:在多线程编程中,Queue可以用来在不同的线程之间传递任务或消息。这有助于实现线程间的协作和通信,并确保任务的顺序执行。

2、数据流处理:在数据流处理中,Queue常常用作缓冲区,存储从数据源获取的数据项。通过将数据项放入队列,可以对其进行进一步的处理或分析。

3、事件驱动的系统:在事件驱动的系统中,Queue用于存储和处理事件。事件可以按照它们发生的顺序放入队列,然后由系统按照先进先出的原则逐个处理。

4、广度优先搜索(BFS):Queue在实现广度优先搜索算法时起到关键作用。通过将节点按顺序放入队列,算法能够按照层级顺序访问节点,首先访问离起始节点最近的节点。

5、任务调度和作业排队:在操作系统或大型系统中,Queue用于任务调度和作业排队。系统将任务放入队列,并根据优先级、到达时间等因素进行排序,然后按照队列的顺序执行任务。

6、消息中间件:在分布式系统中,Queue作为消息中间件的角色出现。生产者将消息放入队列,消费者从队列中获取消息进行处理。这种方式确保了消息的有序传递和处理的可靠性。

7、缓存机制:Queue可以作为缓存机制的一部分,用于存储最近使用或最可能需要的元素。当需要这些元素时,它们可以直接从队列中获取,而无需重新计算或从原始数据源获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/298222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat服务为什么起不来?

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 服务跑在Tomcat下面&#xff0c;有时候会遇到Tomcat起不来的情况。目前为止常遇到的情况有如下几种&#xff1a; 1. Tomcat服务…

Linux第11步_解决“挂载后的U盘出现中文乱码”

学习完“通过终端挂载和卸载U盘”&#xff0c;我们发现U盘下的中文文件名会出现乱码&#xff0c;现在讲解怎么解决这个问题。其实就是复习一下“通过终端挂载和卸载U盘”&#xff0c;单独讲解&#xff0c;是为了解决问题&#xff0c;一次性搞好&#xff0c;我们会不长记性。 在…

无心剑七绝《高斯黎曼》

七绝高斯黎曼 高耸云端四海惊 斯人伟绩震豪英 黎霞璀璨通灵处 曼妙方程万世名 2024年1月6日 平水韵八庚平韵 《七绝高斯黎曼》是无心剑所作的一首以数学家为主题的七言绝句。全诗巧妙地将两位杰出的数学家——高斯&#xff08;Carl Friedrich Gauss&#xff09;与黎曼&#…

性能优化-OpenMP基础教程(三)

本文主要介绍OpenMP并行编程的环境变量和实战、主要对比理解嵌套并行的效果。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &…

HarmonyOS 应用开发学习笔记 stateStyles:多态样式

1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器&#xff1a;定义组件重用样式 Extend装饰器&#xff1a;定义扩展组件样式 前面记录了ets组件样式…

基于粒子群算法的曲面路径优化

目录 摘要 测试函数shubert 粒子群算法的原理 粒子群算法的主要参数 粒子群算法原理 粒子群算法参数拟合 代码 结果分析 展望 基于粒子群算法的曲面路径优化(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88698419 摘要 寻优算法,…

Guarded Suspension模式--适合等待事件处理

Guarded是被守护、被保卫、被保护的意思&#xff0c; Suspension则是暂停的意思。 如果执行现在的处理会造成问题&#xff0c; 就让执行处理的线程进行等待--- 这就是Guarded Suspension模式。 模式通过让线程等待来保证实例的安全性。 一个线程ClientThread会将请求 Request的…

Linux第16步_安装NFS服务

NFS&#xff08;Network File System&#xff09;是一种在网络上实现的分布式文件系统&#xff0c;它允许不同的操作系统和设备之间共享文件和资源。 在创建的linux目录下&#xff0c;再创建一个“nfs“文件夹&#xff0c;用来供nfs服务器使用&#xff0c;便于”我们的开发板“…

C语言注意点(2)

1.使用pow函数的相关问题 局部变量n0 while(num/pow(10,n)) n; 为什么不可行 printf("%d",num/pow(10,4)%10) 为什么要提前用temp先引出来 答&#xff1a;pow函数的返回值为double类型&#xff0c;1.终止条件不会满足 2.num/pow(10,4)结果为浮点型&#xff0c;浮…

Nginx 常用变量 与 防盗链

目录 1.常用变量 2. $http_referer 配置防盗链 2.1 referer 2.2 配置防盗链 1.常用变量 变量说明 $args 请求中的参数&#xff0c;也叫查询参数 $content_length HTTP响应信息里的"Content-Length" $document_root nginx虚拟主机配置文件中的root站点根目录…

STM32的在线升级(IAP)实现方法:BOOT+APP原理详解

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; STM32参考手册 1 在线升级&#xff08;IAP&#xff09;设计思路 为了实现STM32的在线升级&#xff08;IAP&#xff09;功能&#xff0c;通常会将STM32的FLASH划分为BOOT和APP两个部分&#xff0c;BOO…

JavaScript:关系数组、对象的复制

关系数组(关联数组)解字符串出现的次数: var str aaccddvvasdadqwd;// 统计每个字母出现的次数// 关系数组(关联数组) 长度永远为0// 使用字符串当做索引var arr [];arr[0] 20;// arr[a] 1;// arr[b] 3;// arr[c] 4;// console.log(arr)for (var i 0; i < str.lengt…

美经济学家预测,明年美股或将大跌86%,你怎么看?

年初至今&#xff0c;标准普尔500指数上涨25%&#xff0c;道琼斯指数上涨13%&#xff0c;以科技股为主的纳斯达克指数大涨了44%。 美国经济学家哈里斯登特近日预测&#xff0c;这种牛市是“100%人为印钞的结果”&#xff0c;而这一巨大的泡沫将在2024年破灭&#xff0c;届时美…

“智慧”千里眼助力水泵站

泵站是为水提供势能和压能&#xff0c;解决无自流条件下的排灌、供水和水资源调配问题的唯一动力来源&#xff0c;在工农业用水、防洪、排涝和抗旱减灾等方面发挥着重要作用。一旦出现异常&#xff0c;对经济生产将造成难以估量的损失&#xff0c;给水利安全管理造成负担。因此…

反射UnityEditor.GameView设置GamePlayMode分辨率

现在很有游戏考虑横屏适配、竖屏适配、阿拉伯语适配&#xff08;横竖屏&#xff09;导致拼界面变得越来越繁琐。 有很多时候需要记录各个控件的状态。 为了减少操作&#xff0c;特意制作了这个工具&#xff0c;点击用x配置可以自动切换到 宽高分辨率&#xff0c;如果当前没有则…

简易视频播放器(案例)

介绍 本篇Codelab使用ArkTS语言实现视频播放器&#xff0c;主要包括主界面和视频播放界面&#xff0c;我们将一起完成以下功能&#xff1a; 主界面顶部使用Swiper组件实现视频海报轮播。主界面下方使用List组件实现视频列表。播放界面使用Video组件实现视频播放。在不使用视频组…

程序员必知!命令模式的实战应用与案例分析

命令模式是一种行为设计模式&#xff0c;它将请求封装为对象以实现客户端参数化、请求排队、日志记录及撤销操作&#xff0c;旨在解耦调用者与操作实现者&#xff0c;以智能家居为例&#xff0c;用户通过界面发送命令对象&#xff0c;设备作为接收者执行相应操作&#xff0c;无…

物理与网络安全

物流环境安全 场地选择考虑抗震、承重、防火、防水、供电、空气调节、电磁防护、雷击及静电 场地因素&#xff1a; 自然灾害&#xff0c;社会因素&#xff08;加油站、化工厂&#xff09;&#xff0c;配套条件&#xff08;消防&#xff0c;交通&#xff0c;电力&#xff0c;…

QT项目中添加资源文件和使用qss样式

时间记录&#xff1a;2024/1/6 一、添加使用资源文件 1.1 创建项目并打开项目&#xff08;带ui界面的项目&#xff09; 1.2 使用快捷键Ctrln创建文件&#xff0c;选择"QT"下面的"QT Resource File" 1.3 输入文件名和文件保存路径 1.4 将需要添加的文件…

钡铼网关 只需一台,解锁智慧无人搅拌站系统,绿色又环保

行业需求 为了提高搅拌站的自动化&#xff0c;减少人工繁琐的操作&#xff0c;同时记录物料的增减记录&#xff0c;实现对于物料从进场到出场的全周期管理。 系统介绍 针对搅拌站各个环节的需求大致相同&#xff0c;市场中逐渐流行一整套基本的智慧搅拌站解决方案。各种搅拌站…