C++STL---stack queue知识汇总

前言

C++将stack和queue划归到了Containers中,但严格的说这并不准确,stack和queue实际上已经不再是容器了,而是属于容器适配器,适配器做的功能是转换,即:它不是直接实现的,而是由其他容器封装转换实现的,这我们会在后面详谈。

它们作为容器适配器,和容器最大的差别就是它们没有迭代器,也不是说它想要迭代器,但是当时编写STL的大佬没给他们写,而是他们根本就不需要迭代器,因为stack的原则就是"后进先出",queue的原则就是"先进先出",如果有了迭代器就没办法保证他们的原则了。这也就导致了stack和queue的接口较少,我们很容易就能上手。

stack的介绍及使用

1.stack是一种容器适配器,专门用在后进先出的上下文环境中。

2.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其最底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层,特定容器的尾部就是stack的栈顶,被压入数据和弹出数据。

3.stack的底层容器需要支持下面几个条件:

empty:判断是否为空

back:获取尾部元素的引用

push_back:尾插

pop_back:尾删

4.标准容器中vector,duque,list都符合这些要求,如果我们不指明的话,默认使用deque。

stack的定义

一、默认使用deque作为底层定义栈

stack<int> st;

二、使用特定的容器作为底层定义栈

stack<int, vector<int>> st1;
stack<double, list<double>> st2;

stack的使用

成员函数功能
empty判断栈是否为空
size获取站内有效元素个数
top获取栈顶元素
push元素入栈
pop元素出栈
swap交换两个栈中元素

示例代码:

#include<iostream>
#include<vector>
#include<stack>
using namespace std;

void test()
{
	stack<int> st1;
	stack<int, vector<int>>st2;
	st1.push(1);
	st1.push(2);
	st1.push(3);
	st1.push(4);
	while (!st1.empty())
	{
		cout << st1.top();
		st1.pop();
	}
}

int main()
{
	test();
	return 0;
}

queue的介绍及使用

1.队列是一种容器适配器,专门用于上下文先进先出的时候

2.队列使用一种特定容器类封装作为其底层容器,queue提供一组成员函数用来访问修改内部元素。元素队尾入队,队头出队。

3.队列的底层容器需要支持下面的几个条件:

empty:检测队列是否为空

size:返回队列中有效元素个数

front:返回队头元素的引用

back:返回队尾元素的引用

push_back:队尾入元素

pop_front:队头出元素

4.标准容器中有deque和list满足上面的条件,若我们不指定哪种容器做队列的底层,默认使用deque。

queue的定义

一、使用默认的deque作为底层定义队列

queue<int> q;

二、使用特定的容器作为底层定义queue

queue<int,list<int>> q1;

queue的使用

成员函数功能
empty判断队列是否为空
size获取队列中有效数字的个数
front获取队头元素
back获取队尾元素
push队尾入队
pop队头出队
swap交换两个队列中的数据

示例代码:

#include<iostream>
#include<list>
#include<queue>
using namespace std;

void test()
{
	queue<int>q1;
	queue<int, list<int>>q2;
	q2.push(1);
	q2.push(2);
	q2.push(3);
	q2.push(4);

	cout << q2.size() << endl;
	cout << q2.back() << endl;

	while (!q2.empty())
	{
		cout << q2.front() << " ";
		q2.pop();
	}
	cout << endl;
}

int main()
{
	test();
	return 0;
}

以上就是本篇文章的全部内容,谢谢大家! 

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

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

相关文章

ruoyi若依二次开发怎么添加扫描自己的controller和mapper,配置三个地方即可。

概要 首先&#xff0c;添加在com.ruoyi外的类&#xff0c;项目启动后&#xff0c;调用接口&#xff0c;是会返回404找不到的。 必须要对这以外的接口类进行配置。目录结构如下&#xff1a; 解决步骤 一、添加 com.ruoyi.framework.config 下&#xff1a; // 指定要扫描的M…

深度学习革命-AI发展详解

深度学习革命 《深度学习革命》是一部引人深思的作品&#xff0c;详细讲述了深度学习技术的发展历程及其对各个行业的深远影响。由杰出的计算机科学家、深度学习专家撰写&#xff0c;这本书不仅适合科技领域的专业人士阅读&#xff0c;也为普通读者提供了一个理解人工智能革命…

LeetCode322.零钱兑换

文章目录 题目描述解题思路递归记忆化搜索动态规划另一种实现 题目描述 https://leetcode.cn/problems/coin-change/description/?envTypestudy-plan-v2&envIdtop-interview-150 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount …

考研规划,这么学上岸率比985的学霸还高!

我觉得985考研上岸率低是可以理解的 因为大家本科能考上985&#xff0c;那研究生大概率会报考和本学校差不多或者更高水平的院校&#xff0c;甚至清华北大都有人敢报&#xff0c;去实现自己本科没有实现的梦想。 而且985其实保研的比例很高&#xff0c;一般有30%的保研比例了…

亚马逊测评自养号技术全攻略:一站式解决方案

在跨境电商这行&#xff0c;产品测评可是个大问题。如果你的商品销量少&#xff0c;评价也不多&#xff0c;那买家就很难注意到你的产品&#xff0c;更别提下单购买了。毕竟&#xff0c;大家都喜欢跟风买那些已经有很多人好评的产品&#xff0c;而不是冒险尝试一个全新的。 我们…

基于JSP技术的社区疫情防控管理信息系统

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSPJavaBeans 工具&#xff1a;MyEclipse、Tomcat、Navicat 系统展示 首页 用户注册与登录界…

《大宅门》特别活动走进李良济,开启探寻中医药文化之旅!

《大宅门》话剧将于6月14-16日在苏州湾大剧院上演&#xff0c;为了让大家了解到中医药知识&#xff0c;6月2日&#xff0c;李良济携手苏州湾大剧院举办《大宅门》特别活动“探寻中医药文化之旅”&#xff01; 6月2日下午&#xff0c;大家一起走进李良济&#xff0c;深度了解传统…

Django框架中级

Django框架中级 – 潘登同学的WEB框架 文章目录 Django框架中级 -- 潘登同学的WEB框架 中间件自定义中间件常用中间件process_view() 使用中间件进行URL过滤 Django生命周期生命周期分析 Django日志日志配置filter过滤器自定义filter 日志格式化formatter Django信号内置信号定…

51单片机STC89C52RC——1.1点亮一个LED

目录 STC单片机模块 LED模块 创建Keil项目 代码 效果 STC单片机模块 我们程序中要点亮的LED灯的位置如下图。 我们程序要用到的针脚如下图 LED模块 电路图如下 8个LED&#xff0c;全部点亮 每一bit位 都需要设置为0 二进制是0000 0000 。如果只点亮D1一个&#xff…

进口电动低温调节阀的作用-美国NOTON

进口电动低温调节阀在低温环境下的精确控制、广泛的工业应用、高效能设计、耐低温性和密封性、稳定性及可靠性以及安全性等方面发挥着重要作用。 进口电动低温调节阀的作用主要体现在以下几个方面&#xff1a; 低温环境下的精确控制&#xff1a; 进口电动低温调节阀是一种专为…

jenkins插件之Jdepend

JDepend插件是一个为构建生成JDepend报告的插件。 安装插件 JDepend Dashboard -->> 系统管理 -->> 插件管理 -->> Available plugins 搜索 Jdepend, 点击安装构建步骤新增执行shell #执行pdepend if docker exec phpfpm82 /tmp/composer/vendor/bin/pdepe…

怎么把wmv格式转换成mp4?四种将wmv转成MP4格式的方法

怎么把wmv格式转换成mp4&#xff1f;在微软操作系统中&#xff0c;我们经常会遇到wmv格式的视频文件。这种由微软开发的视频格式在微软平台上有很好的兼容性&#xff0c;但它也存在一些被忽视的缺点。首先&#xff0c;wmv格式支持数字版权管理&#xff0c;这意味着某些视频可能…

期权有用吗?期权都有哪些用途?

今天带你了解期权有用吗&#xff1f;期权都有哪些用途&#xff1f;期权和期货作为衍生工具,都有风险管理、资产配置和价格发现等功能。 期权有用吗&#xff1f; 期权作为一种衍生金融工具&#xff0c;具有多种用途和好处&#xff0c;对不同类型的投资者和市场参与者来说&#…

Ubuntu编译指定版本NVMe Cli工具

1.克隆nvme-cli的存储库&#xff08;repository&#xff09;&#xff1a; git clone https://github.com/linux-nvme/nvme-cli.git2. 进入nvme-cli目录&#xff0c;并切换到指定版本&#xff1a; cd nvme-cli git checkout v1.93. 编译nvme-cli&#xff1a; make4. 安装nvme…

剪画小程序:图片去除文字,我用它只要10秒!

Hello&#xff0c;大家好呀&#xff01;我是不会画画的小画~ 图片上的文字该如何去除&#xff1f; 在工作或者学习中&#xff0c;我们常常需要处理一些图片文件&#xff0c;比如扫描的文件、 电子文档等。有时候&#xff0c;图片上可能会有文字&#xff0c;这时候需要将图片…

鸿蒙开发:从入门到实战!

一&#xff0c;默认模版中是容器Row或者Column中添加一个Text文本&#xff0c;我们可以尝试一下修改它的内容和样式&#xff0c;对UI语法有一个初体验&#xff1a; // 文本内容 Text("沉默的闪客") // 字体大小 .fontSize(50) //背…

VS-qt中运行程序时报错:fatal error RC1015:cannot open include file ‘afxres.h‘

开发环境&#xff1a;VS2015 qt5.12.10 点击运行时报错如下&#xff1a; 搜索了下afxres.h文件&#xff0c;发现位置如下&#xff1a; 看样子是VS中少安装了部分模块导致的&#xff0c;&#xff0c;看了同事的电脑&#xff0c;该文件应该是在以下目录中的&#xff1a; 所…

从零开始:如何在直播应用中集成美颜SDK和美颜插件

本篇文章&#xff0c;小编将详细介绍如何从零开始&#xff0c;在直播应用中集成美颜SDK和美颜插件。 一、准备工作 确定需求 在开始集成美颜SDK之前&#xff0c;首先需要明确需求。考虑以下几个问题&#xff1a; 直播应用的目标用户是谁&#xff1f; 需要集成哪些美颜功能&…

gbase 扩容 集群数据同步 主备切换

问题&#xff1a; 问题1磁盘满 1.原本是100G的大小&#xff0c;我们实际还没接入真正业务&#xff0c;昨日空间满了&#xff0c;需要帮忙看下是什么原因导致磁盘满的吗 数据库是每天备份一次&#xff0c;是不是备份的太频繁&#xff0c;还是数据量的问题导致&#xff0c;需要…

Apache Doris 基础 -- 数据表设计(模式更改)

用户可以通过schema Change操作修改现有表的模式。表的模式主要包括对列的修改和对索引的修改。这里我们主要介绍与列相关的Scheme更改。对于与索引相关的更改&#xff0c;可以查看数据表设计/表索引&#xff0c;查看每个索引的更改方法。 1、术语 基本表&#xff08;Base Ta…