STL-stack容器和queue容器

2023-11-14

stack概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口

栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

与queue相似,stack也是一个适配器类,它给底层vector提供了典型的栈接口。stack比vector的限制多,不允许随机访问栈元素,不能够允许遍历栈,只是把使用限制在栈的基本操作。既可以将压入栈顶,从栈顶弹出元素、查看栈顶的数值、检查元素数目和测试是否为空。栈为先进先出。
 

 stack 常用接口:

构造函数:

stack<T > stk;                       //stack采用模板类实现, stack对象的默认构造形式
stack(const stack& stk);             //拷贝构造函数

赋值操作:

stack& operator=(const stack& stk);            //重载等号操作符

数据存取:

push(elem);            //向栈顶添加元素
pop();                 //从栈顶移除第一个元素
top();                 //返回栈顶元素

大小操作:

empty();             //判断堆栈是否为空
size();               //返回栈的大小

示例:

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

//栈容器常用接口
void test01()
{
	//创建栈容器 栈容器必须符合先进后出
	stack<int> s;

	//向栈中添加元素,叫做 压栈 入栈
	s.push(1);
	s.push(2);
	s.push(3);
	cout << "栈的大小为:" << s.size() << endl;
	while (!s.empty())//如果stack中还有元素,那么就继续输出栈顶元素 
	{
		//输出栈顶元素
		cout << "栈顶元素为: " << s.top() << endl;
		//弹出栈顶元素
		s.pop();
	}
	cout << "栈的大小为:" << s.size() << endl;

}

int main() {

	test01();

	system("pause");

	return 0;
}

运行结果:

queue概念:queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据

queue类是一个适配器类。queue模板让底层类(默认为deque)展示为典型的队列接口。queue的限制比deque更多。不仅不支持随机访问,甚至不允许遍历队列。他只能将元素添加到队尾、从队首删除元素、查看队尾和队首的数值、检查元素数目和测试队列是否为空。(这就是阉割版的deque,但是用在纯队列中效率更高)
 

queue常用接口:

 构造函数:

queue<T > que;                        //queue采用模板类实现,queue对象的默认构造形式
queue(const queue & que);             //拷贝构造函数

赋值操作:

queue& operator=(const queue & que);            //重载等号操作符

数据存取:

push(elem);                              //往队尾添加元素
pop();                                   //从队头移除第一个元素
back();                                  //返回最后一个元素
front();                                 //返回第一个元素

大小操作:

empty();             //判断堆栈是否为空
size();               //返回栈的大小

示例:

#include<iostream>
using namespace std;
#include<queue>
#include<string>
class Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	string m_Name;
	int m_Age;
};

void test01() {

	//创建队列
	queue<Person> q;

	//准备数据
	Person p1("唐僧", 30);
	Person p2("孙悟空", 1000);
	Person p3("猪八戒", 900);
	Person p4("沙僧", 800);

	//向队列中添加元素  入队操作
	q.push(p1);
	q.push(p2);
	q.push(p3);
	q.push(p4);

	//队列不提供迭代器,更不支持随机访问	
	while (!q.empty()) {
		//输出队头元素
		cout << "队头元素-- 姓名: " << q.front().m_Name
			<< " 年龄: " << q.front().m_Age << endl;

		cout << "队尾元素-- 姓名: " << q.back().m_Name
			<< " 年龄: " << q.back().m_Age << endl;

		cout << endl;
		//弹出队头元素
		q.pop();
	}

	cout << "队列大小为:" << q.size() << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

运行结果:

stack和queue的使用场景

借助栈的先进后出的特性,可以简单实现一个逆序输出的功能,首先把所有元素依次入栈,然后把所有元素出栈并输出

包括编译器的在对输入的语法进行分析的时候,例如"()"、"{}"、"[]"这些成对出现的符号,借助栈的特性,凡是遇到括号的前半部分,即把这个元素入栈,凡是遇到括号的后半部分就比对栈顶元素是否该元素相匹配,如果匹配,则前半部分出栈,否则就是匹配出错

包括函数调用和递归的时候,每调用一个函数,底层都会进行入栈操作,出栈则返回函数的返回值

生活中的例子,可以把乒乓球盒比喻成一个堆栈,球一个一个放进去(入栈),最先放进去的要等其后面的全部拿出来后才能出来(出栈),这种就是典型的先进后出模型

队列

当我们需要按照一定的顺序来处理数据,而该数据的数据量在不断地变化的时候,则需要队列来帮助解题

队列的使用广泛应用在广度优先搜索中,例如层次遍历一个二叉树的节点值

生活中的例子,排队买票,排在队头的永远先处理,后面的必须等到前面的全部处理完毕再进行处理,这也是典型的先进先出模型

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL-stack容器和queue容器 的相关文章

随机推荐

  • 网站更换域名后链接的更改(运维端)

    公司由于备案的问题 需要将域名www servera com更换为www serverb com 但是原先网站所有链接均指向www servera com 这个时候可以通过2种方法 1 在负载均衡器增加301跳转 这样打开每个www ser
  • 阿里云ecs.u1-c1m1.large服务器u1实例通用算力型CPU性能评测

    阿里云服务器ecs u1 c1m1 large为2核2G的通用算力型u1服务器 CPU采用2 5 GHz主频的Intel Xeon Platinum 8163 Skylake 或者8269CY Cascade Lake 阿里云百科分享阿里云
  • Use a SAML Token to Obtain a vCloud Suite Session ID ----使用SAML 令牌 获取VCloud 会话ID

    原文 span style font size 12px Another case is when the client requests a vCloud Suite endpoint on the management node the
  • Web components新玩具——X-View

    X View是一款遵循Web Components规范 类似React语法的JavaScript library 支持的特性 Object assign WeakMap Custom Elements Shadow DOM
  • JS调试日志输出和异常处理

    一 直接启用浏览器调试功能 Chrome浏览器中 1 按下F12打开调试界面 2 选择source选项卡 选中script文件打开 3 单击行增删断点 F10单步调试 F11进入函数 F8下一个断点 鼠标移动到变量上可以查看该变量的值 4
  • 信号量、互斥体和自旋锁的区别

    cpp view plaincopyprint 信号量 互斥体允许进程睡眠属于睡眠锁 自旋锁则不允许调用者睡眠 而是让其循环等待 所以有以下区别应用 1 信号量和读写信号量适合于保持时间较长的情况 它们会导致调用者睡眠 因而自旋锁适合于保持
  • 什么是算法?

    算法 解决特定问题求解步骤的描述 在计算机中表现为指令的有限序列 并且每条指令表示一个或多个操作 算法特性 输入 输出 有穷性 确定性 可行性 算法设计的要求 正确性 1 算法程序没有语法错误 2 算法程序对于合法输入数据能够产生满足要求的
  • cmake设定项目版本信息

    一 version h in模板文件 pragma once define VER MAJOR 1 define VER MINOR 0 define VER BUILD 1 define VER REVISION PROJECT REVI
  • C#试题

    1 关于C 中的结构 一下说法中错误的是 选择一项 A 结构可以有构造函数 B 结构体内可以有字段 C 结构体内可以有方法 D 结构体内可以被继承 2 在C 编程中 访问修饰符控制程序对类中成员的访问 如果不写访问修饰符 类的默认访问类型是
  • excludePathPatterns方法不生效

    1 场景 我在项目中配置了License证书授权的功能 然后在配置拦截器的时候拦截了所有的请求都必须验证License是否到期 但是这样会导致接口响应慢 所以打算使用 excludePathPatterns 方法对部分url请求放行 例如我
  • element UI 表格table多个数值进行排序筛选

    效果图 1 表格html部分
  • Java序列化和反序列化(详解)

    一 理解Java序列化和反序列化 Serialization 序列化 将java对象以一连串的字节保存在磁盘文件中的过程 也可以说是保存java对象状态的过程 序列化可以将数据永久保存在磁盘上 通常保存在文件中 deserializatio
  • ffmpeg源码安装

    ffmpeg源码安装 http blog yundiantech com log blog id 35 1 安装yasm tar xvzf yasm 1 3 0 tar gz cd yasm 1 3 0 configure make mak
  • 北斗高精度卫星接收机的分类

    北斗卫星导航接收机是用来收集处理天线接收到的电磁信号 理想的接收机抑制所有不需要的噪声 并对需要的信号不增加任何噪声或干扰 不管信号的形式或格式如何 它都可以变换 以适合信号处理器检波电路所要求的特性 然后再送到智能用户接口 北斗卫星导航接
  • [war打包]在maven-antrun-plugin复制更改了配置文件但是maven-war-plugin打包出来配置文件没变化(草稿)

    前言 背景介绍 在某个java web项目中 需要根据maven的profile的配置进行properties文件的切换 例如 项目的配置文件结构如下 在resources文件夹下面分别有profiles文件夹及conf文件夹 重点关注 p
  • 【OpenCV入门教程Java版之一】安装OpenCV:OpenCV4.6.0+IDEA开发环境配置

    在读研期间的研究方向与图像处理有一点相关 后来由于工作可能会有需要 所以晚上回去也闭门研究了OpenCV和图像处理相关的知识 也准备写一个OpenCV系列的专栏作为自己的学习笔记 也分享给大家 如果有写错的地方也欢迎大家及时指出 好了这篇文
  • 搭建STM32F407的SPI-Flash(基于STM32CubeMX)

    网上有不少例子 都对 但对我来说碰到几个坑 避免以后再犯错 mark下 目标 通过SPI接口 对Nor Flash进行读写 开发板上Nor Flash 是W25Q128 128Mbit 也就是16MB样子 CubeMx端配置 配置要分两个
  • OpenStack--实现内外网结构

    类似于阿里云 ECS 主机的内外网 双网卡不通网段 的结构 最终实现内外网区分隔离 https www aliyun com product ecs utm medium text utm source baidu utm campaign
  • STM32低速时钟频率校准方法

    RT Thread的PM组件利用LPTIM来实现低功耗唤醒和系统tick补偿 而LPTIM的时钟源一般会选择LSI LSI这玩意儿功耗虽然只有几百nA 但是频偏非常大 例如STML051手册上就说LSI的频率在26kHz 56kHz之间 典
  • STL-stack容器和queue容器

    stack概念 stack是一种先进后出 First In Last Out FILO 的数据结构 它只有一个出口 栈中只有顶端的元素才可以被外界使用 因此栈不允许有遍历行为 与queue相似 stack也是一个适配器类 它给底层vecto