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

news2024/11/18 15:47:29

目录

一. 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.coloradmin.cn/o/1621100.html

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

相关文章

redis底层数据结构之ziplist

目录 一、概述二、ziplist结构三、Entry结构四、为什么ZipList特别省内存五、ziplist的缺点 redis底层数据结构已完结&#x1f44f;&#x1f44f;&#x1f44f;&#xff1a; ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️red…

ETL工具-nifi干货系列 第十六讲 nifi Process Group实战教程,一文轻松搞定

1、目前nifi系列已经更新了10多篇教程了&#xff0c;跟着教程走的同学应该已经对nifi有了初步的解&#xff0c;但是我相信同学们应该有一个疑问&#xff1a;nifi设计好的数据流列表在哪里&#xff1f;如何同时运行多个数据流&#xff1f;如启停单个数据流&#xff1f; 带着这些…

第二期书生浦语大模型训练营第四次笔记

大模型微调技术 大模型微调是一种通过在预训练模型的基础上&#xff0c;有针对性地微调部分参数以适应特定任务需求的方法。 微调预训练模型的方法 微调所有层&#xff1a;将预训练模型的所有层都参与微调&#xff0c;以适应新的任务。 微调顶层&#xff1a;只微调预训练模型…

Pandas数据分析小技巧

Pandas数据分析小技巧&#xff1a;提升数据处理效率与准确性的秘诀 Pandas是一个强大的Python数据分析库&#xff0c;它提供了快速、灵活且富有表现力的数据结构&#xff0c;使得数据清洗、转换、分析等操作变得简单而高效。本文将介绍一些Pandas数据分析的小技巧&#xff0c;…

年如何在不丢失数据的情况下解锁锁定的 Android 手机?

当您忘记密码、PIN 码或图案并且想要解锁 Android 手机时&#xff0c;您可能会丢失 Android 手机上的数据。但您无需再担心&#xff0c;因为在这里&#xff0c;我们想出了几种解锁锁定的 Android 手机而不丢失数据的方法。 方法 1. 使用 Android Unlock 解锁锁定的 Android 且不…

【上海大学计算机组成原理实验报告】四、指令系统实验

一、实验目的 了解指令结构、PC寄存器的功能和指令系统的基本工作原理。 学习设计指令的方法。 二、实验原理 根据实验指导书的相关内容&#xff0c;对于部分使用频率很高&#xff0c;且只用几条微指令即可完成的简单操作&#xff0c;可以把这部分简单操作的微指令序列固定下…

mfc140.dll丢失如何修复,分享多种有效的修复方法

在日常操作和使用电脑的过程中&#xff0c;我们可能会遇到一种较为常见的问题&#xff0c;即在尝试启动或运行某个应用程序时&#xff0c;系统突然弹出一个错误提示窗口&#xff0c;明确指出“mfc140.dll文件丢失”。这个mfc140.dll实际上是一个动态链接库文件&#xff08;DLL&…

linux运行ant 报错 Unable to locate tools.jar【已解决】

linux安装 ant 运行时报错 Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64/lib/tools.jar 原因 已安装的jdk只有运行环境&#xff0c;没有tool.jar&#xff0c;而ant运行需要java开发环境&#xff0c;因…

不可思议!我的AI有道英语字典助手竟然与百度千帆AI应用创意挑战赛K12教育主题赛榜首作品差之毫厘

目录 一、前言二、效果对比三、优化《AI英语词典》提示词四、其他获奖作品链接 一、前言 今天看百度千帆AI原生应用创意挑战赛——K12教育主题赛&#xff0c;发现第一名的《我爱记单词》和我早两天发布的一篇《AI英语词典》的想法不谋而合。当时我们应该都是互相不知道对方的&a…

软件游戏缺失d3dcompiler_43.dll怎么修复?分享多种靠谱的解决方法

在我们日常频繁地操作和使用电脑的过程中&#xff0c;时常会遇到一些突发的技术问题。其中一种常见的情况是&#xff0c;在尝试启动或运行某个应用程序时&#xff0c;系统会弹出一个错误提示窗口&#xff0c;明确指出当前电脑环境中缺少了一个至关重要的动态链接库文件——d3dc…

Mysql全局优化总结

Mysql全局优化总结 从上图可以看出SQL及索引的优化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我们要在这块花更多时间 服务端系统参数 官方文档&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_connections…

【MATLAB源码-第197期】基于matlab的粒子群算法(PSO)结合人工蜂群算法(ABC)无人机联合卡车配送仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 基于粒子群优化&#xff08;PSO&#xff09;算法的无人机联合卡车配送系统是一个高效的物流配送策略&#xff0c;旨在优化配送过程中的成本、时间和资源利用率。该系统融合了无人机和卡车的配送能力&#xff0c;通过智能算法…

MT2041 三角形的个数

思路&#xff1a;找规律&#xff0c;推公式 4等分&#xff1a; 头朝上的三角形&#xff1a; 边长为1&#xff1a;1234s1&#xff1b; 边长为2&#xff1a;123s2&#xff1b; 边长为3&#xff1a;12s3&#xff1b; 边长为4&#xff1a;1s4&#xff1b; 即si12...n-i1(n-i2)*(n-i…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 3 - 4节&#xff09; P3《开发准备-了解ArkTS》 鸿蒙开发主要是用来开发移动端应用的。 以前我们开发移动端应用的代码&#xff…

如何把视频中的画面保存为图片?免费的工具不用白不用

在数字化时代&#xff0c;截取视频中的珍贵瞬间成为了人们创作、分享和保存回忆的重要方式。 那么&#xff0c;如何迅速捕捉视频中的精彩画面&#xff0c;留存美好瞬间呢&#xff1f;有人说直接截图就可以&#xff0c;如果直接截图就可以&#xff0c;小编就不用写这篇文章了&a…

Tomcat源码解析——一次请求的处理流程

在上一篇文章中&#xff0c;我们知道Tomcat在启动后&#xff0c;会在Connector中开启一个Acceptor(接收器)绑定线程然后用于监听socket的连接&#xff0c;那么当我们发出请求时&#xff0c;第一步也就是建立TCP连接&#xff0c;则会从Acceptor的run方法处进入。 Acceptor&…

29 OpenCV 图像距

文章目录 距的概念API函数示例 距的概念 距的概念 API函数 moments( InputArray array,//输入数据 bool binaryImagefalse // 是否为二值图像 )contourArea( InputArray contour,//输入轮廓数据 bool oriented// 默认false、返回绝对值)arcLength( InputArray curve…

springboot结合elasticJob

先说一说什么是elasticJob。 ElasticJob是一个分布式任务调度的解决方案&#xff0c;它由俩个相互独立的子项目Elastic-job-lite和Elastic- job-cloud组成。 任务调度&#xff1a;是指系统为了自动完成特定任务&#xff0c;在任务的特定时刻去执行任务的过程。 分布式&#xf…

BUUCTF---misc---[SWPU2019]我有一只马里奥

1、下载附件是一个.exe文件 2、运行之后可以看到桌面生成了1.txt文件&#xff0c;文件里面有如下内容 3、经过信息搜索&#xff1a;NTFS&#xff08;New Technology File System&#xff09;是一种由Microsoft开发的专有日志文件系统。根据它的提示&#xff0c;应该是把flag.tx…

安装Fake UserAgent 库的方法最终解答!_Python库

安装Python库Fake UserAgent 我的环境&#xff1a;Window10&#xff0c;Python3.7&#xff0c;Anaconda3&#xff0c;Pycharm2023.1.3 Fake UserAgent Fake UserAgent 是一个Python库&#xff0c;用于生成随机或特定的用户代理&#xff08;UserAgent&#xff09;字符串。用户…