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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金智维KRPA问题集锦

KRPA问题集锦 1、打开浏览器错误 &#xff08;1&#xff09;浏览器插件问题&#xff0c;需要正确安装ChromePlug插件&#xff0c; &#xff08;2&#xff09;windows系统下需要正确配置chrome.exe运行环境变量

「Verilog学习笔记」任意奇数倍时钟分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule clk_divider#(parameter dividor 5) ( input clk_in,input rst_n,output clk_out );parameter CNT_WIDTH $clog2(dividor - 1) ; reg flag1, f…

2023年度全球重大关基安全事件 TOP 10 | FreeBuf 年度盘点

2023年&#xff0c;针对关键信息基础设施的网络攻击已经演变成为了一个全球性的问题&#xff0c;无论是中、美、俄等国际大国&#xff0c;还是诸多小国/地区&#xff0c;无论是经济发达还是落后&#xff0c;都无法保证绝对免疫关键基础设施的攻击。为了保障国家安全和社会稳定&…

urdf文件<gazebo>内<plugin>标签作用(虚拟驱动)

To get ROS to interact with Gazebo, we have to dynamically link to the ROS library that will tell Gazebo what to do. Theoretically, this allows for other Robot Operating Systems to interact with Gazebo in a generic way. In practice, its just ROS. 如果要使…

CTFshow web入门web128-php特性31

开启环境: 一个新的姿势&#xff0c;当php扩展目录下有php_gettext.dll时&#xff1a; _()是一个函数。 _()gettext() 是gettext()的拓展函数&#xff0c;开启text扩展get_defined_vars — 返回由所有已定义变量所组成的数组。 call_user_func — 把第一个参数作为回调函数调…

我不想学JAVA---------JAVA和C的区别

前言 我一个研究方向是SLAM的为什么要来学JAVA。 从九月份开学到现在&#xff0c;已经学了Linux&#xff0c;数据结构&#xff0c;SLAM&#xff0c;C的基础操作&#xff0c;期间还参与编写了一本VHDL的教材。还有上课、考试什么的其他杂七杂八的事情就不说了。 读研好苦逼&…

麒麟KYLINOS操作系统上扩容系统盘

原文链接&#xff1a;麒麟KYLINOS操作系统上扩容系统盘 hello&#xff0c;大家好啊&#xff01;继之前我们讨论了如何在统信UOS上扩容数据盘之后&#xff0c;今天我要给大家带来的是在麒麟KYLINOS操作系统上扩容系统盘与数据盘的方法。随着数据的不断增长&#xff0c;系统盘或数…

大数据Doris(五十):数据导出的其他导出案例参考

文章目录 数据导出的其他导出案例参考 一、​​​​​

kubectl命令行交互

Cobra库 k8s各组件的cli部分都使用Cobra库实现&#xff0c;Cobra 中文文档 - 掘金 (juejin.cn)&#xff0c;获取方式如下&#xff1a; go get -u github.com/spf13/cobralatest cobra库中的Command结构体的字段&#xff0c;用于定义命令行工具的行为和选项。它们的作用如下&…

C语言KR圣经笔记 5.7多维数组 5.8指针数组初始化 5.9指针vs多维数组

5.7 多维数组 C 提供了矩形的多维数组&#xff0c;虽然实际上它们用得比指针数组少得多。本节我们将展示多维数组的一些特性。 考虑下日期转换的问题&#xff1a;把某月的第几天转换为当年的第几天&#xff0c;以及反向转换。例如&#xff0c;3月1日是非闰年的第60天&#xf…

DGL离线安装

https://data.dgl.ai/wheels/repo.htmlhttps://data.dgl.ai/wheels/repo.html pip install dgl-cu1110.8.2 -f https://data.dgl.ai/wheels/repo.html

Spring Cloud Alibaba 介绍与版本映射关系

目录 前言 一、Spring Cloud Alibaba 是什么&#xff1f; 二、Spring Cloud Alibaba 版本依赖 前言 Spring Cloud 本身并不是一个拿来即可用的框架&#xff0c;它是一套微服务规范&#xff0c;这套规范共有两代实现。 (子项目)&#xff1a; ● 第一代实现&#xff1a; Spr…