【STL详解 —— stack和queue的模拟实现】-程序员宅基地

技术标签: C++  c++  java  开发语言  

STL详解 —— stack和queue的模拟实现

在这里插入图片描述
在这里插入图片描述

我们通过查库可知 stackqueue 的模板参数。
其中模板参数 Container 我们在上一篇文章已经介绍,具体可见:STL详解 —— stack和queue的介绍及使用

stack模拟

我们利用容器适配器来模拟实现 stack,我们可以使用一个已有的容器作为底层存储结构,并在其基础上封装一个类,实现栈的操作。这样就可以通过复用底层容器的成员函数来实现栈的功能。

具体要实现的成员函数包括:

成员函数 函数作用
push 压栈
pop 出栈
top 取栈顶元素
size 获取栈里面的元素个数
empty 判空

这里以vector为例来演示:

namespace qq
{
    
	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();
		}

		size_t size()
		{
    
			return _con.size();
		}

		bool empty()
		{
    
			return _con.empty();
		}

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

queue模拟

同理,我们再进行 queue 的模拟

deque 来模拟。

成员函数 函数作用
push 入队列
pop 出队列
front 获取对头元素
back 获取队尾元素
size 获取队列元素个数
empty 判空
namespace qq
{
    
	template<class T, class Container = std::deque<T>>
	class queue
	{
    
	public:
		void push(const T& x)
		{
    
			_con.push_back(x);
		}

		void pop()
		{
    
			_con.pop_front();
		}

		size_t size()
		{
    
			return _con.size();
		}

		bool empty()
		{
    
			return _con.empty();
		}

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

		const T& back()
		{
    
			return _con.back();
		}
	private:
		Container _con;
	};
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jokr_/article/details/137838116

智能推荐

WebAssembly完全入门——了解wasm的前世今身-程序员宅基地

文章浏览阅读58次。前言接触WebAssembly之后,在google上看了很多资料。感觉对WebAssembly的使用、介绍、意义都说的比较模糊和笼统。感觉看了之后收获没有达到预期,要么是文章中的例子自己去实操不能成功,要么就是不知所云、一脸蒙蔽。本着业务催生技术的态度,这边文章就诞生了。前部分主要是对WebAssembly的背景做一些介绍,WebAssembly是怎么出现的,优势在哪儿。如果想直接开始撸代码试试..._-s use_xx wasm

创建一个conda环境及将其用于复现别人代码的全过程以及遇到的问题_如何创建别人论文的代码依赖项的conda环境-程序员宅基地

文章浏览阅读3k次,点赞12次,收藏59次。用于小白复现别人论文的代码condawin+r,输入cmd进入命令行,输入conda的情况下出现'conda' 不是内部或外部命令,也不是可运行的程序 或批处理文件。如何用conda查看,创建,切换,管理环境1.查看环境2.创建环境3.切换环境4.管理环境5.删除环境6.环境克隆使用我们搭建的环境来复现别人的代码复现别人代码7.如何安装不同位的Pythonanaconda的安装我就不说了,有很多的教程。主要是第一次跑代码时发现,有时候复现别人的代码会出现一会去安装环境,一会儿去安装环境,conda一个很_如何创建别人论文的代码依赖项的conda环境

Stars POJ - 2352 二维偏序问题CDQ分治_树状数组二维偏序-程序员宅基地

文章浏览阅读246次。Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are not higher and ..._树状数组二维偏序

CS229 吴恩达机器学习 习题大作业答案 problem sets 04 PS04(第6题,欢迎指教)强化学习 Reinforcement Learning MDP 马尔可夫决策_cs229 吴恩达机器学习 习题答案-程序员宅基地

文章浏览阅读1.1k次。6. Reinforcement Learning: The inverted pendulum首先写出simulator(作业中已提供,直接复制过来):import matplotlib.pyplot as pltimport matplotlib.patches as patchesfrom math import sin, cos, piclass CartPole: def __init__(self, physics): self.physics = physi_cs229 吴恩达机器学习 习题答案

在FPGA中实施PCI Express桥接解决方案-程序员宅基地

文章浏览阅读378次。关注、星标公众号,精彩内容每日送达来源:网络素材点击上方蓝字关注我们! 使用 FPGA 的优势之一是能够实施经过验证的知识产权,以快速、自信地完成桥接功能。看看一个常见但复杂的接口PCI Express,就可以证明这些好处。 与其前身外围组件互连 (PCI) 一样,PCI Express (PCIe) 正在成为一种无处不在的系统接口。与 PCI 不同,PCIe 采用 SERDES 接..._pcie桥接芯片模块

【Java面试题】unity和java就业前景_java unity 就业-程序员宅基地

文章浏览阅读253次。分布式锁的坑高并发场景下的问题以下问题不是说在并发不高的场景下不容易出现,只是在高并发场景下出现的概率更高些而已。性能问题来自于以下两方面:**①获取锁的时间上。**如果 Redlock 运用在高并发的场景下,存在 N 个 Master 节点,一个一个去请求,耗时会比较长,从而影响性能。这个好解决,通过上面描述不难发现,从多个节点获取锁的操作并不是一个同步操作,可以是异步操作,这样可以多个节点同时获取。即使是并行处理的,还是得预估好获取锁的时间,保证锁的 TTL>获取锁的时间+任务处理时间_java unity 就业

随便推点

基于贝塞尔曲线的变道轨迹规划_贝塞尔曲线 自动紧急换道-程序员宅基地

文章浏览阅读9k次,点赞14次,收藏118次。基于贝塞尔曲线的变道轨迹规划车辆的换道与超车是驾驶员常见的驾驶操作之一,无人驾驶车辆在行驶过程中也会频繁的面临此工况,车辆行驶过程中必须根据行驶环境中车车之间的相对速度与距离,以及车辆周边其他环境的变化信息,相应做出调整进而完成驾驶要求。在这个过程中,车辆必须对安全换道和超车的通过性做出准确评估,从而使车辆安全的运行。因此,无人车的轨迹规划是保证车辆安全行驶的重要组成部分。..._贝塞尔曲线 自动紧急换道

fedora14 15 16 apache mysql php yum安装_fedora 15如何安装zlib-程序员宅基地

文章浏览阅读714次。fedora14 15 16 apache mysql php yum安装2010年06月26日 星期六 10:14LAMP是Linux, Apache, MySQL, PHP的缩写.这篇教程将教你如何在一台Fedora 服务器上安装Apache2web服务器+PHP(mod_php) +MySQL .我已经测试无误,你可以放心使用。1. 前言_fedora 15如何安装zlib

推荐10个AI人工智能技术网站_ai网站-程序员宅基地

文章浏览阅读1.4w次。AI World的主题包括AI技术、AI应用、AI实践和AI商业。AI Trends (https://www.aitrends.com/) 是一个专注于人工智能领域的网站,它提供了最新的AI技术和应用趋势的报道和分析。AI News(https://www.ainewsletter.com/)是一家专注于人工智能领域的新闻平台,它提供了最新的人工智能技术和应用方面的新闻报道、分析和评论。这些作者和专家对于人工智能技术的发展和应用有着深入的了解和研究,他们的文章和分析通常能够提供非常有价值的洞察和思考。_ai网站

探索Windows驱动程序开发:一个实践导向的学习资源-程序员宅基地

文章浏览阅读806次,点赞21次,收藏20次。探索Windows驱动程序开发:一个实践导向的学习资源项目地址:https://gitcode.com/nmgwddj/learn-windows-drivers在软件世界中,编写操作系统级别的驱动程序是一项高级且复杂的任务,但对于想要深入底层系统工作的开发者来说,这是一个至关重要的领域。Learn-Windows-Drivers 是一个专为学习和理解Windows驱动程序开发而设计的开源项目...

有关数组面试题解析_面试题 数组 震荡解决-程序员宅基地

文章浏览阅读126次。如何判断一个数组是数组arr instanceOf Arrayarr.constructor === ArrayObject.prototype.toString(arr) === “[object Array]”Array.isArray(arr)数组有那些方法之前总结过:JavaScript数组的有关方法截取数组arr.slice(ac,en)arr.split() /..._面试题 数组 震荡解决

命令行手动上传Jar包到Maven私服_命令行 执行jar包发布maven-程序员宅基地

文章浏览阅读1.8k次。做Java的同学经常会用到一些第三方Jar包,而有一些Jar包在Maven中央仓库中找不到。为了团队协作开发的方便,我们需要将这类Jar上传到公司的maven nexus私服上。除了下载源代码打包上传的方式以外,我们还可以通过maven命令将jar上传到maven私服。这种的好处是可以利用作者打好的包,在时间紧急甚至没有源代码的情况下,将Jar上传到Maven。只需要下面的命令就可以上传Jar..._命令行 执行jar包发布maven