C++初阶:STL详解(九)——stacke和queue的模拟实现

news2024/9/28 22:06:07

✨✨小新课堂开课了,欢迎欢迎~✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:C++:由浅入深篇

小新的主页:编程版小新-CSDN博客

前言:

我们已将了解了 stack和queue的使用,几天就来看一下模拟实现吧。

C++初阶:STL详解(八)——stack和queue的介绍和使用-CSDN博客

一.stack的模拟实现 

前面在stake和queue的介绍和使用里,我们介绍了适配器的相关内容,我们在模拟实现stack和queue的时候都只需要调用duquq容器的各个接口来实现我们stack的接口即可。

函数说明接口说明

stack()构造空的栈

empty()检测stack是否为空

size()返回stack中元素的个数

top()返回栈顶元素的引用

push()将元素val压入stack中

pop()将stack中尾部的元素弹出

namespace xing
{
	template<class T, class Container = std::deque<T>>
	class stack
	{
	public:
		//入栈
		void push(const T& x)
		{
			_con.push_back(x);
		}

		//出栈
		void pop()
		{
			_con.pop_back();
		}

		//获取栈顶元素
		T& top()
		{
			return _con.back();
		}

		const T& top()
		{
			return _con.back();
		}

		//获取有效元素的个数
		size_t size()
		{
			return _con.size();
		}

		//判断栈是否为空
		bool empty()
		{
			return _com.empty();
		}

		//交换数据
		void swap(stack<T,Container> &  s)
		{
			_con.swap(s._con);
		}


	private:
		Container _con;
	};
}

二.queue的模拟实现

 queue也是只需要调定deque容器的各个接口来模拟实现自己的接口即可。

函数声明接口说明
queue()构造空的队列
empty()检测队列是否为空,是返回true,否则返回false
size()返回队列中有效元素的个数
front()返回队头元素的引用
back()返回队尾元素的引用
push()在队尾将元素val入队列
pop()将队头元素出队列
namespace fu
{
	template<class T, class Container = std::deque<T>>
	class queue
	{
	public:
		//入队列
		void push(const T& x)
		{
			_que.push_back();
		}

		//出队列
		void pop()
		{
			_que.pop_front();
		}

		//获取队头元素
		T& front()
		{
			return _que.front();
		}

		const T& front()
		{
			return _que.front();
		}

		//获取队尾数据
		T& back()
		{
			return _que.back();
		}

		const T& back()
		{
			return _que.back();
		}

		//返回有效元素的个数
		size_t size()
		{
			return _que.size();
		}

		//判断队列是否为空
		bool empty()
		{
			return _que.empty();
		}

		//交换数据
		void swap(queue<int,Container>& q)
		{
			_que.swap(q._que);
		}


	private:
		Container _que;
	};
}

总结:

stack和queue的模拟实现是不是很简单呢,只要借助外力就可以了。

感谢各位大佬的观看,创作不易,还请各位大佬支持~ 

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

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

相关文章

PHP爬虫:获取商品销量详情API的利器

在电子商务时代&#xff0c;商品的销量数据对于商家来说至关重要。它不仅能够帮助商家了解市场动态&#xff0c;还能够指导库存管理和营销策略。PHP作为一种流行的服务器端脚本语言&#xff0c;结合其强大的HTTP请求处理能力&#xff0c;可以有效地用于编写爬虫程序&#xff0c…

【教学类-18-04】20240508《蒙德里安“黑白格子画” 七款图案挑选》

背景需求 最近有2位客户买了蒙德里安黑白格子画的素材&#xff0c;其中一位问是否是1000张。 【教学类-18-03】20240508《蒙德里安“红黄蓝黑格子画”-A4横版》&#xff08;大小格子&#xff09;_processing简单图形画蒙德里安-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞35次…

记忆osi七层模型的口诀/方法/谐音

物理层、数据链路层、网络层、传输层、会话层、表示层和应用层 物数网传会表应&#xff08;无数网船会飙英&#xff08;语&#xff09;&#xff09; 记忆方法&#xff1a; 想象面前有很多挂着渔网的船&#xff0c;船上的人会说英语。 无数的网船上会有人飙英语。

【Android】多角度看handler--looper的阻塞

在【Android】app中阻塞的looper为什么可以响应touch事件_消息队列阻塞为什么还能响应点击事件-CSDN博客 里面&#xff0c;我们查看到input事件唤醒应用中的looper阻塞&#xff0c; 作为对比&#xff0c;我们再看看广播中的唤醒&#xff0c;我们知道&#xff0c;在注册的广播…

大数据毕业设计选题推荐-食品销售数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

RabbitMQ的高级特性-延迟队列

延迟队列(Delayed Queue)&#xff0c;即消息被发送以后, 并不想让消费者⽴刻拿到消息, ⽽是等待特定时间后,消费者才能拿到这个消息进⾏消费 应用场景 延迟队列的使⽤场景有很多, ⽐如: 1. 智能家居: ⽤⼾希望通过⼿机远程遥控家⾥的智能设备在指定的时间进⾏⼯作. 这时候就可…

linux项目_c语言:Makefile编写、动态库生成、添加动态库路径

一直想搞懂Linux中Makefile是怎么管理项目的&#xff0c;知识积累到一定程度后&#xff0c;我就做了一个自己的缩小项目去把剩下的细节搞清楚 代码&#xff1a; Service.c: #include <stdio.h> #include "lib_sevr.h" int main(){printf("输入a, b的值…

【C++】内存管理:内存分布、new/delete

本篇主要介绍一下C的内存管理相关知识。C的内存管理和C语言保持一致。 1.C/C内存分布 一个程序的数据存储是需要分区的。常见的内存区域划分如下。 我们学C主要了解栈&#xff0c;堆&#xff0c;数据段&#xff0c;代码段 。 我们先看下面代码和相关问题。 int globalvar…

Python编码系列—Python命令模式:将请求封装为对象

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

RabbitMQ——消息的可靠性处理

1.业务分析 在业务的开发中&#xff0c;我们通常将业务的非核心业务交给MQ来处理&#xff0c;比如支付&#xff0c;在支付过后&#xff0c;我们需要扣减余额&#xff0c;修改支付单状态&#xff0c;修改订单状态&#xff0c;发送短信提醒用户&#xff0c;给用户增加积分等等&am…

技术分享|一文读懂三维建模技术

在上一期推文中&#xff0c;我们简要介绍了国产3A级大作游戏《黑神话&#xff1a;悟空》中应用的实时渲染技术&#xff0c;同时&#xff0c;还展示了RflySim工具链中基于Unreal Engine虚幻引擎开发的三维可视化显示软件—RflySim3D/UE5。它利用高逼真度的仿真技术&#xff0c;结…

商家营销工具架构升级总结

今年以来&#xff0c;商家营销工具业务需求井喷&#xff0c;需求数量多且耗时都比较长&#xff0c;技术侧面临很大的压力。因此这篇文章主要讨论营销工具前端要如何应对这样大规模的业务需求。 问题拆解 我们核心面对的问题主要如下&#xff1a; 1. 人力有限 我们除了要支撑存量…

全国省、市、县(区)土地利用类型及面积面板数据(2019-2022年)

土地利用类型是根据土地利用方式和地域差异对土地资源单元进行划分的基本土地地域单元。 2019年-2022年全国省、市、县&#xff08;区&#xff09;土地利用类型及面积面板数据_土地利用类型数据下载资源-CSDN文库https://download.csdn.net/download/2401_84585615/89466102 …

2024版最新Wireshark安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了_wireshark 4.4.0安装要求

前言 这是大白给粉丝盆友们整理的网络安全渗透测试入门阶段渗透测试工具第9篇。 喜欢的朋友们&#xff0c;记得给大白点赞支持和收藏一下&#xff0c;关注我&#xff0c;学习黑客技术 Wireshark 什么是WireShark&#xff1f;Wireshark 是一个开源抓包工具或者叫网络嗅探器&a…

FPGA-Vivado-IP核-逻辑分析仪(ILA)

ILA IP核 背景介绍 在用FPGA做工程项目时&#xff0c;当Verilog代码写好&#xff0c;我们需要对代码里面的一些关键信号进行上板验证查看。首先&#xff0c;我们可以把需要查看的这些关键信号引出来&#xff0c;接好线通过示波器进行实时监测&#xff0c;但这会用到大量的线材…

ViTamin——视觉-语言时代的可扩展视觉模型设计

人工智能咨询培训老师叶梓 转载标明出处 尽管视觉-语言模型&#xff08;VLMs&#xff09;已经取得了显著的成就&#xff0c;但在图像编码器的选择上&#xff0c;传统的视觉Transformer&#xff08;ViT&#xff09;依然是主流。尽管Transformer在文本编码领域已经证明了其有效性…

无线感知会议系列【5】 无线感知边界-1

前言&#xff1a; 无线感知边界是整个ISAC 里面一个研究的难点和重点。 本篇主要来源于2022 《WiFi感知边界研究-Ubicomp2022论文分享》 感知的相关论文组会 2016年无线感知研究主要是国内高校主导,各种无线感知论坛 2021年无线感知 VIVO,OPPO &#xff0c;华为&#xff0c;国…

LeetCode讲解篇之33. 搜索旋转排序数组

文章目录 题目描述题解思路题解代码 题目描述 题目链接 题解思路 旋转后的数组具备一个特性&#xff0c;如果把数组分割成两部分&#xff0c;必定至少有一部分是递增的&#xff0c;并且其中递增区间可以通过左端点小于右端点这个特征来确定 我们基于这个特性&#xff0c;进…

通信工程学习:什么是MIMO多输入多输出技术

MIMO:多输入多输出技术 MIMO(Multiple-Input Multiple-Output)多输入多输出技术是一种在无线通信中广泛应用的技术,它通过利用多个天线进行数据传输和接收,可以显著提高无线通信系统的性能和容量。以下是对MIMO技术的详细解释: 一、定义与原理 MIMO技术…

XWF使用指南

简介 X-Ways Forensics 是由 Stefan Fleischmann 编写的一个轻量化的应急响应及取证工具&#xff0c;是 WinHex 的法证版本&#xff0c;因此界面逻辑和 WinHex 较为相似。在配置好 mplayer 的情况下&#xff0c;程序总体积在 100MiB 左右&#xff0c;运行时内存占用极低&#…