C++ - STL详解(七)— stack和queue的介绍及使用

目录

一. stack 

1.1 stack的介绍 

1.2 stack的定义 

 1.3 stack的使用

​编辑

二. queue

2.1 queue的介绍

2.2 queue的定义

2.3 queue的使用


一. stack 

1.1 stack的介绍 

  • stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。 
  • stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。

成员函数功能

(constructor)

构造空的栈
empty检测stack是否为空
size返回stack中元素的个数

top

返回栈顶元素的引用

push

将元素val压入stack中

pop

将stack中尾部的元素弹出

1.2 stack的定义 

 头文件:#include <stack>

一.  使用默认的适配器定义栈

stack<T> stackName;
//这里,T 是你想在栈中存储的数据类型。例如,如果你想创建一个存储整数的栈,你可以这样定义:
stack<int> myStack;

二.  使用特定的适配器定义栈

std::stack 使用一个底层容器进行封装,默认情况下是 std::deque,但是你也可以指定其他容器,如 std::vectorstd::list。如果你想使用特定的底层容器,你可以在定义栈时这样写:

#include <stack>
#include <vector>
#include <list>
std::stack<int, std::vector<int>> stackUsingVector;
//第一个int:这是栈中将要存储的数据的类型。在这个例子中,栈将存储 int 类型的数据。
//std::vector<int>:这是栈的底层容器类型和该容器存储的数据类型。
//std::vector<int> 指定了std::stack 使用一个 int 类型的 std::vector 作为其底层容器。
//这意味着 stack 将会利用td::vector 的功能来处理数据存储和相关操作。
std::stack<int, std::list<int>> stackUsingList;

 注意:这样写是错误的

std::stack<int, std::vector<double>> stackUsingVector;

不行,std::stack 的第二个模板参数,即底层容器,它的元素类型必须与栈存储的元素类型一致。在给出的例子 std::stack<int, std::vector<double>> stackUsingVector; 中,栈被声明为存储 int 类型的元素,而底层容器 std::vector<double> 被声明为存储 double 类型的元素,这是不匹配的。

栈的元素类型和底层容器的元素类型必须相同。正确的声明应该是这样,如果你想要一个 int 类型的栈,那么底层容器也应该是 int 类型的:

 1.3 stack的使用

int main()
{stack<int,vector<int>> s1;s1.push(1);//push的用法s1.push(2);s1.push(3);s1.push(4);s1.push(5);cout << s1.size() << endl;//size的用法while (!s1.empty())//empty的用法{cout << s1.top() << " ";//top的用法s1.pop();//pop的用法。栈顶最开始是5,pop将5弹出之后,栈顶为4,以此类推}return 0;
}

二. queue

2.1 queue的介绍

  • 队列是一种容器适配器,专门用在具有先进先出操作的上下文环境中,其只能从容器的一端插入元素,另一端提取元素。
  • 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。

成员函数功能

(constructor)

构造空的队列
empty检测队列是否为空,是返回true,否则返回false

size

返回队列中有效元素的个数

front

返回队头元素的引用

back

返回队尾元素的引用

push

在队尾将元素val入队列

pop

将队头元素出队列

2.2 queue的定义

一.  使用默认的适配器定义栈

queue<int> q1;

q1 是一个队列,其元素类型为 int。在没有指定底层容器的情况下,std::queue 默认使用 std::deque 作为其底层容器。 

二.  使用特定的适配器定义栈

queue<int, vector<int>> q2;
queue<int, list<int>> q3;

这里也要注意,第一个int和后面的int要保持一致 

2.3 queue的使用

int main() {queue<int> q;// 向队列中插入元素q.push(1);q.push(2);q.push(3);//判断是否为空cout << "IsEmpty: " << q.empty() << "\n";// 显示队首和队尾元素cout << "Front: " << q.front() << "\n";cout << "Back: " << q.back() << "\n";// 移除队首元素q.pop();// 再次显示队首元素cout << "Front after pop: " << q.front() << "\n";return 0;
}

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

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

相关文章

Java中的消息队列(如RabbitMQ、Kafka)是如何工作的

Java中的消息队列&#xff08;Message Queue&#xff09;是一种用于应用程序之间或应用程序组件之间进行异步通信的机制。消息队列允许发送者&#xff08;生产者&#xff09;将消息发送到队列中&#xff0c;而接收者&#xff08;消费者&#xff09;可以从队列中读取并处理这些消…

代码随想录算法训练营第十八天 | 513.找树左下角的值、112. 路径总和、113. 路径总和ii

代码随想录算法训练营第十八天 | 513.找树左下角的值、112. 路径总和、113. 路径总和ii 自己看到题目的第一想法看完代码随想录之后的想法自己实现过程中遇到哪些困难 链接: 513.找树左下角的值 链接: 112. 路径总和&#xff0c;和 113. 路径总和ii 链接: 从中序与后序遍历序…

Debezium系列之:部署Debezium采集Oracle数据库的详细步骤

Debezium系列之:部署Debezium采集Oracle数据库的详细步骤 一、部署Debezium Oracle连接器二、Debezium Oracle 连接器配置三、添加连接器配置四、可插拔数据库与不可插拔数据库一、部署Debezium Oracle连接器 部署的详细步骤可以参考博主这篇技术文章: Debezium系列之:安装…

怎么用3ds MAX制作蜂窝状模型?

1、新建多边形&#xff1a;打开3ds MAX软件&#xff0c;在样条线中新建一个多边形。 2、设置参数&#xff1a;切换到顶视图&#xff0c;设置多边形的参数&#xff0c;例如半径为10&#xff0c;变数为6&#xff0c;以形成一个六边形的基础。 3、复制并形成圆柱状&#xff1a;打开…

如何通过Postgres的日志进行故障排查?

文章目录 一、配置日志记录二、查看和分析日志三、使用日志进行故障排查的示例四、总结 在进行数据库管理和维护时&#xff0c;日志分析是一项至关重要的技能。PostgreSQL的日志记录功能可以帮助我们追踪数据库的运行状态&#xff0c;定位问题&#xff0c;以及优化性能。下面&a…

深入Git配置

git配置 git config -h usage: git config [<options>]Config file location--global use global config file--system use system config file--local use repository config file--worktree use per-worktree con…

【Java】如何获取客户端IP地址

在项目中往往涉及到“获取客户端IP地址”&#xff0c;常见到下面这样子的代码&#xff1a; package com.utils;import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.http.server.reactive.ServerHttpRequest; import java.net…

逻辑运算符

一 介绍 用于连接多个条件&#xff08; 多个关系表达式&#xff09; &#xff0c; 最终的结果也是一个 boolean 值。 &&#xff1a;逻辑与&&&#xff1a;短路与|&#xff1a;逻辑或||&#xff1a;短路或&#xff01; 取反^&#xff1a;异或 二 逻辑运算规则 a&a…

K210基础实验——独立按键中断

前言 学习K210开发板的独立按键和中断功能 一、涉及到的外设资源是K210开发板上的BOOT按键和RGB灯 二、BOOT按键按下&#xff0c;MCU上连接BOOT的IO口变为低电平&#xff0c;松开后为高电平 三、引脚对应关系 BOOT : IO16 RGB灯&#xff1a; R:IO6 G:IO7 B:IO8 四、在…

【linux】多路径|Multipath I/O 技术

目录 简略 详细 什么是多路径? Multipath安装与使用 安装 使用 Linux下multipath软件介绍 附录 配置文件说明 其他解 简略 略 详细 什么是多路径? 普通的电脑主机都是一个硬盘挂接到一个总线上&#xff0c;这里是一对一的关系。 而到了分布式环境&#xff0c;主机和存储网络连…

NLP(5)-softmax和交叉熵

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 感觉全连接层就像一个中间层转换数据的形态的,或者说预处理数据&#xff1f; 代码 softmax就是把输出的y 归一化&#xff0c;把结果转化为概率值&#xff01;&#xff0c;在分类问题中很常见。 而交叉熵是一种损失函数&…

UDP协议深度解析:从原理到应用全面剖析

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 前言 随着互联网的蓬勃发展&#xff0c;网络通信协议成为了支撑其稳定运行的关键。UDP协议作为网络通信协议中的重要一员&…

华为ensp中rip和ospf路由重分发 原理及配置命令

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月20日20点21分 路由重分发&#xff08;Route Redistribution&#xff09;是指路由器将从一种路由协议学习到的路由信息&#xff0c;通过另一种路由协议通告出去的功…

现货白银保证金交易要先分析趋势

现货白银是保证金交易品种&#xff0c;买卖过程中可能会涉及数十倍的资金杠杆&#xff0c;所以它对投资者的分析水平和交易水平的要求都比较高&#xff0c;所以在进入这个市场之前&#xff0c;投资者需要先学习一些基本的分析方法&#xff0c;当中可以分为基本面和技术面两大流…

每日一坑(pymongo版本从3.*升到4.*)

今天在做代码优化的时候发现pymongo版本不同会出现问题&#xff0c;正常3.*能跑的代码&#xff0c;一旦使用4.2或者4.3版本&#xff08;其他版本没有试&#xff0c;但应该也有问题&#xff09;就会出现 ServerSelectionTimeoutError问题&#xff0c;最后到官网找到了问题所在&a…

C++智能指针(二十)

一.RAII&#xff08;Resource Acquisition Is Initialization&#xff09; RAII资源获取即初始化&#xff0c;RAII的思想就是在构造时初始化资源&#xff0c;或者托管已经构造的资源。在析构的时候释放资源。一般不允许复制或赋值&#xff0c;并且提供若干的资源访问的方法。比…

URL地址解析至页面展示全过程(面试详细解答)

目录 1、解析URL 2、缓存判断 ​编辑3、DNS解析 ​编辑4、获取MAC地址 5、TCP三次握手 6、HTTP请求 7、服务器处理请求&#xff0c;返回HTTP响应 8、页面渲染 9、TCP四次挥手 10、浏览器解析HTML 11、浏览器布局渲染 1、解析URL 首先会对 URL 进行解析&#xff0c;…

RS232、RS485、RS422、TTL、CAN各自的区别

目录 一&#xff1a;工业串口通信标准RS232、RS485、RS422的区别 第一个区别、硬件管脚接口定义不同 第二个区别、工作方式不同 第三个区别、通信方式不同 第四个区别&#xff0c;逻辑特性不同 第五个区别、抗干扰性、传输距离和传输速率也不同 二&#xff1a;RS232、RS…

CentOS 源码安装 Python3

今天在安装部分服务的时候&#xff0c;由于系统 CentOS 中默认带了 Python2&#xff0c;但是我的项目需要是 Python3 支持&#xff0c;特此将整个安装步骤记录下来。 安装必要的依赖 安装环境依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlit…

docker安装并跑通QQ机器人实践(4)-bs-cqhttp搭建

go-cqhttp&#xff0c;基于 Mirai 以及 MiraiGo 的 OneBot Golang 原生实现&#xff0c;只需简单的配置, 就可以基于 go-cqhttp 使用框架开发&#xff0c;具有轻量, 原生, 高并发, 低占用, 跨平台等特点。 1 go-cqhttp 官网及可执行文件下载链接 go-cqhttp 官网&#xff1a;ht…