当前位置: 首页 > news >正文

[ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现

本篇博文主要介绍C++ STL库中stack,queue的使用及其模拟实现,以及涉及到deque的介绍。

目录

1. stack

1.1 stack的介绍

1.2 stack使用及其模拟实现

1.2.1 stack() 

1.2.2 其他接口

2.queue

2.1 queue的介绍

2.2 queue使用及其模拟实现

2.2.1 queue()

 

2.2.2 其他接口及其模拟实现


1. stack

1.1 stack的介绍

stack官方文档介绍

1. stack 是一种容器适配器,专门用在具有 后进先出 操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
2. stack 是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部( 即栈顶 ) 被压入和弹出。
3. stack 的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:
        empty:判空操作
        back:获取尾部元素操作
        push_back:尾部插入元素操作
        pop_back:尾部删除元素操作
4. 标准容器 vector deque list 均符合这些需求,默认情况下, 如果没有为stack指定特定的底层容器,默认情况下使用deque。

1.2 stack使用及其模拟实现

函数说明
接口说明
stack()
构造空的栈

empty()

检测 stack 是否为空
size()
返回 stack 中元素的个数
top()
返回栈顶元素的引用
push()
将元素 val 压入 stack
pop()
stack 中尾部的元素弹出

1.2.1 stack() 

栈的构造,析构等默认成员函数不需要我们自己手动写,因为他是自定义类型,会自动调用默认成员函数。

1.2.2 其他接口

栈是deque容器适配器构造的一个对象,因此栈的相关接口都可以使用容器适配器的接口,其实是一层封装。

因此,这些接口的代码实现也都非常的简单了

namespace lxy
{
    //stack
	template<class T, class Container = deque<T>>
	class stack
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_back();
		}
		const T& top()
		{
			return _con.back();
		}

		size_t size()
		{
			return _con.size();
		}
		bool empty()
		{
			return _con.empty();
		}
	private:
		Container _con;
	};

2.queue

2.1 queue的介绍

queue官方文档介绍

 

1. 队列是一种容器适配器,专门用于在 FIFO 上下文 (先进先出) 中操作,其中从容器一端插入元素,另一端提取元素。
2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类, queue 提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。
3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:
        empty:检测队列是否为空
        size:返回队列中有效元素的个数
        front:返回队头元素的引用
        back:返回队尾元素的引用
        push_back:在队列尾部入队列
        pop_front:在队列头部出队列
4. 标准容器类 deque list 满足了这些要求。 默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。

2.2 queue使用及其模拟实现

函数声明
接口说明
queue()
构造空的队列
empty()
检测队列是否为空,是返回 true ,否则返回 false
size()
返回队列中有效元素的个数
front()
返回队头元素的引用
back()
返回队尾元素的引用
push()
在队尾将元素 val 入队列
pop()
将队头元素出队列

2.2.1 queue()

与栈类似,会调用默认的成员函数

 

2.2.2 其他接口及其模拟实现

队列和栈的大逻辑正好相反,因此pop和push相关接口只需要反着调用即可,难度不大。

namespace lxy
{
	template<class T, class Container = deque<T>>
	class queue
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_front();
		}
		const T& front()
		{
			return _con.front();
		}
		const T& back()
		{
			return _con.back();
		}

		size_t size()
		{
			return _con.size();
		}
		bool empty()
		{
			return _con.empty();
		}
	private:
		Container _con;
	};

(本篇完)

 

相关文章:

  • 【CSAPP】深入理解计算机系统 第九章 虚拟内存 动态链接 printf 17/26
  • 软文营销评论区怎样营造好的氛围?
  • Android Gradle plugin requires Java 11 问题解决
  • mysql安装,安装mysql配置教程(超级详细图解)
  • 为什么现在西红柿都“硬邦邦”的,放几个星期都不会坏?为你解答
  • java实现微信小程序获取手机号(htts接口实现)
  • 亚马逊,速卖通,国际站卖家为什么要做测评
  • Centos7搭建sftp服务器,开启SFTP上报日志
  • 模式识别课程混合式教学设计
  • 基于云原生的视频管理系统设计与实现
  • AOP的使用(详细讲解)
  • DES加密算法安全吗,有哪些优点和缺点?
  • AI智能分析网关包含哪些深度学习算法?如何赋能场景应用?
  • JavaEE图书管理项目
  • SpringBoot Web开发----Thymeleaf的简单入门
  • 0x05 Python数据分析,Anaconda八斩刀
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • nfs客户端进程变D,延伸linux的lock
  • Nodejs和JavaWeb协助开发
  • SegmentFault 2015 Top Rank
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • webgl (原生)基础入门指南【一】
  • 缓存与缓冲
  • 今年的LC3大会没了?
  • 力扣(LeetCode)357
  • 判断客户端类型,Android,iOS,PC
  • 积累各种好的链接
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (ibm)Java 语言的 XPath API
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (分布式缓存)Redis持久化
  • (十一)c52学习之旅-动态数码管
  • (一)RocketMQ初步认识
  • (转)Mysql的优化设置
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Core中的去虚
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET/C# 使窗口永不获得焦点
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • []串口通信 零星笔记
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [ajaxupload] - 上传文件同时附件参数值
  • [C#] 我的log4net使用手册
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [Docker]五.Docker中Dockerfile详解
  • [HJ73 计算日期到天数转换]