模拟实现stack/queue

2023-05-16

模拟实现stack/queue

  • stack
    • 大体框架
    • 接口函数实现
  • queue
    • 大体框架
    • 接口函数

stack

之前的博客中介绍了栈和队列的相关功能,这里我们模拟实现一个栈和队列

大体框架

由于栈的特殊性,栈不支持迭代器访问,同时栈的实现可以使用链表也可以使用数组,因此这里定义的成员为容器类型,具体使用哪个容器可以自己传入,默认一般使用deque。

	template<class T,class Container = deque<T>>
	class stack
	{
	private:
		//vector<T> _v;
		Container _con;
	};

接口函数实现

这里上面的容器是vector、list或者deque这些有自己的构造函数,因此我们不需要再写构造函数和析构函数。其他常见的接口如下:

		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_back();
		} 

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

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

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

queue

大体框架

队列和栈类似,也是可以以不同的容器实现的,因此框架和stack一样,传入容器即可

	template<class T, class Container = deque<T>>
	class queue
	{

	private:
		Container _con;
	};

接口函数

这里的接口函数与stack情况类似,只需要考虑栈和队列存放数据规则的不同即可,栈为后进先出,队列为先进先出。其中push等命令的实现可以直接使用容器(vector等)自身的接口函数进行复用即可,需要注意的是这种复用需要该容器本身有这个接口函数。

	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() const
		{
			return _con.front();
		}

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

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

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

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

模拟实现stack/queue 的相关文章

  • 如何在 celery task.apply_async 中使用优先级

    我有一个testcelery 中的队列 我为它定义了一个任务 celery app task queue test ignore result True def priority test priority print priority 它
  • 持久 Akka 邮箱和无损

    在 Akka 中 当一个 actor 在处理消息时死亡 内部onReceive 该消息丢失 有没有办法保证无损 有没有办法配置 Akka 始终保留消息before将他们发送到onReceive 以便在演员死亡时可以恢复并重播 也许像持久邮箱
  • 增加java中单个工作线程的堆栈空间

    在我的java web应用程序中 我有一个后台工作线程 它需要大量的堆栈空间 因为它使用activiti工作流引擎和groovy脚本任务运行一个非常复杂的工作流 目前 我需要在 64 位 Java 和 Tomcat 上将 JVM Xss 设
  • 在 Ubuntu 11.04 中禁用堆栈崩溃保护

    我在 2007 年 MacBook 上运行 32 位 Ubuntu 11 04 并且刚刚开始了解缓冲区溢出漏洞 我正在尝试运行书中的示例程序 但 Ubuntu 的安全措施使我无法成功执行缓冲区溢出 这是我尝试运行的代码 include
  • 使用 Stacks Java 将中缀转换为 Postfix

    我正在尝试编写一个程序将中缀表达式转换为后缀表达式 我正在使用的算法如下 1 Create a stack 2 For each character t in the expression If t is an operand append
  • 需要帮助 Discord 机器人队列

    我一直在尝试为不和谐机器人和我的 gt q命令基本上工作为join play queue同时 问题是它只能同时对 2 首歌曲进行排队 所以我需要帮助使其对多首歌曲进行排队 queues check queue def check queue
  • 为什么堆上的内存分配比堆栈上的内存分配慢得多?

    我已经被告知很多次了 但我不知道为什么 从堆分配内存时会涉及哪些额外成本 与硬件有关吗 与CPU周期有关吗 这么多的猜测 但没有确切的答案 有人能给我一些详细说明吗 正如 unwind 所说 Heap数据结构比Stack更复杂 在我看来 当
  • SQL Server 进程队列竞争条件

    我有一个订单队列 多个订单处理器通过存储过程访问该队列 每个处理器都会传递一个唯一的 ID 该 ID 用于锁定接下来的 20 个订单以供自己使用 然后 存储过程将这些记录返回给订单处理器以进行操作 有些情况下多个处理器能够检索相同的 Ord
  • 修改栈上的返回地址

    我研究了缓冲区溢出漏洞的基础知识 并尝试了解堆栈是如何工作的 为此 我想编写一个简单的程序 将返回地址的地址更改为某个值 有人可以帮助我计算基指针的大小以获得第一个参数的偏移量吗 void foo void char ret char pt
  • 如何限制创建 celery 任务的速度快于消耗速度的脚本?

    我有一个脚本可以生成数百万个 Celery 任务 数据库中每行一个任务 有没有办法限制它 以免它完全淹没芹菜 理想情况下 我想让 Celery 保持忙碌 但我不希望 Celery 队列的长度超过几十个任务 因为这只是浪费内存 特别是因为如果
  • 如何增加 Qt 中线程的堆栈大小 - QThread::setStackSize() 似乎不起作用?

    从问题来看 运行批量插入或替换 500 行时 SQLite 堆栈溢出 为什么 https stackoverflow com questions 22576958 sqlite stack overflow when running a b
  • NOP 雪橇如何工作?

    我找不到回答这个问题的好来源 我知道 nop sled 是一种用于规避缓冲区溢出攻击中堆栈随机化的技术 但我无法理解它是如何工作的 有什么简单的例子可以说明这种方法 128 字节 nop sled 等术语是什么意思 有些攻击包括使程序跳转到
  • 通过值获取 std::queue 中元素的索引

    有没有一种简单的方法来获取元素在 a 中的位置std queue通过它在 C 中的值 例如 std queue
  • Azure 有害队列计数警报规则

    在之前的一个项目中 我设法设置了一个警报规则 该规则会查看有害队列消息计数 并在队列中存在某些内容时 每天一次 使用 webhook 向 slack 发出警报 我试图找到它在 Azure 中的位置 因为看起来事情已经发生了变化 如果这不是
  • $(this).dequeue();与下一个();

    如果我这样做有什么区别吗 queue queue function next next queue function next next versus queue queue function this dequeue queue func
  • printf() var-arg 引用如何与堆栈内存布局交互?

    给出代码片段 int main printf Val d 5 return 0 是否有任何保证编译器会存储 Val d and 5 连续地 例如 d l a V 5 Format String
  • Python多重处理使用队列写入同一文件

    我知道 Stack Exchange 上有很多与将多处理结果写入单个文件相关的帖子 并且我在阅读了这些帖子后就开发了我的代码 我想要实现的是并行运行 RevMapCoord 函数并使用 multiprocess queue 将其结果写入一个
  • 我如何在 C++ 中将数组存储到队列

    queue lt int gt qq for int i 0 i lt N i int cc 2 i i 1 qq push cc N很大但不精确 所以我想使用队列 我想存储很多数组来排队 但是 qq 存储的数组是同一个 我该怎么做 你的代
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return

随机推荐

  • Android Camera HAL3中预览preview模式下的数据流

    本文均属自己阅读源码的点滴总结 xff0c 转账请注明出处谢谢 欢迎和大家交流 qq 1037701636 email gzzaigcn2009 64 163 com Software xff1a 系统源码Android5 1 前沿 xff
  • 【1】RNA-seq 测序数据之Hisat2比对-featurecount计算-EdgeR分析

    一 拿到 测序数据之后 xff0c 首先选择参考基因组及比对工具进行比对 1 Hisat比对 xff1a xff08 6个G的测序数据耗时20分钟 xff0c 比对率78 4 xff09 物种差异度大导致比对率低 build index h
  • Android Camera API2中采用CameraMetadata用于从APP到HAL的参数交互

    本文均属自己阅读源码的点滴总结 xff0c 转账请注明出处谢谢 欢迎和大家交流 qq 1037701636 email gzzaigcn2009 64 163 com Software xff1a 系统源码Android5 1 前沿 xff
  • Android.mk中LOCAL_MODULE_CLASS对LOCAL_MODULE_PATH 的影响

    LOCAL MODULE CLASS用于制定LOCAL MODULE PATH的路径所在 如果在Android mk没有直接明确LOCAL MODULE PATH 的话 xff0c 需要通过以下规则来自动生成base rules mk xf
  • PRODUCT_COPY_FILES的深入理解,为何不能在Android.mk使用

    PRODUCT COPY FILES本质是和定义产品的AndroidProducts mk xff08 get all product makefiles来获取系统中所有AndroidProducts mk 文件路径 xff09 联系在一起
  • linux驱动开发经验逐步积累2

    注 xff1a 笔记多少会有问题 xff0c 多多包涵 只是作为一个记录而已 1 cdev add的核心思想 cdev add允许添加一个字符设备到内核 xff0c 其核心是kobj map xff0c 也可以添加一个字符设备集合 xff0
  • 记录下在csdn那些年里所使用的博客座右铭

    xfeff xfeff 2016 xff0c 认认真真做事 xff0c 脚踏实地生活 路漫漫 xff0c 意不变 xff0c 求静 xff0c 求心 xff0c 求进 2017 xff0c 重新开始 xff0c 从心开始 xff0c 从家开
  • 多寄存器寻址指令ldmia/ldmib和ARM存储器访问指令——多寄存器存取

    多寄存器和堆栈寻址的用法 xff1a 多寄存器寻址 xff1a LDMIA xff0c LDMIB xff0c STMIA xff0c STMIB xff0c LDMDA xff0c LDMDB xff0c STMDA xff0c STMD
  • 使用CCS5.1导入的3.3工程编译错误lib/subdir_vars.mk:11: *** missing separator. Stop.

    D Program Files CCS5 1 ccsv5 utils bin gmake k all lib subdir vars mk 11 missing separator Stop TI方面说是CCS5 1的BUG xff0c 在
  • 写给我的2013

    前沿 xff1a 代码看的累了 xff0c 在新的一年终于可以找点时间来回忆我的2013 想着要写点什么 xff0c 可是又没有什么可以写 因为回忆无非就是夹杂着些许痛苦与欢乐 写给我的2013 家 生活 xff1a 2013年 xff0c
  • 写给我的2014——也写给我即将逝去的研究生生涯

    前言 xff1a 2014 1在写着代码的时写下了回忆 xff0c 2015 1在码着论文的时候开始写起消逝的2014 细细回忆 xff0c 真是又是那句老话 xff0c 时间过得真快 xff0c 1年过去了 xff1b 更快的是竟然都要毕
  • Oracle官网下载历史版本软件

    一 分享一个Oracle官网下载各种软件的网址 https edelivery oracle com osdc faces SoftwareDelivery 这个网址是Oracle官网专门下载软件的地址 xff0c 下载软件过程如下 xff
  • 技术盘点:消息中间件的过去、现在和未来

    作者介绍 xff1a 林清山 xff08 花名 xff1a 隆基 xff09 操作系统 数据库 中间件是基础软件的三驾马车 xff0c 而消息队列属于最经典的中间件之一 xff0c 已经有30多年的历史 其发展主要经历了以下几个阶段 xff
  • C语言小游戏——扫雷

    上次我们用C语言实现了一个三子棋的小游戏 xff0c 这次我们同样使用C语言来实现扫雷这个经典的小游戏 首先 xff0c 在开始编程之前还是先整理一下我们的编程思路 xff1a 一 菜单打印 xff1a 和上次实现三子棋的操作类型 xff0
  • 缺省参数讲解

    缺省参数 缺省参数定义缺省参数分类1 全缺省参数 xff1a 2 半缺省参数 xff1a 注意事项 缺省参数定义 缺省参数作为C 43 43 不同于C语言新增的一种语法功能 xff0c 他的作用是在声明或定义函数时为参数指定的一个默认值 x
  • Linux下的权限

    Linux下的权限 用户分类文件类型具体文件类型 基本权限root用户 xff1a 修改权限使用方法 xff1a 通过8进制数字更改权限 对于文件 xff0c 权限的意义读权限写权限运行权限 对于目录权限的意义 更改文件拥有者 所属组cho
  • 类和对象初识

    类和对象初识 类的由来类的定义类的特性封装访问限定符 类的定义方法声明和定义全部放在类体中声明放在 h文件中 xff0c 类的定义放在 cpp文件中类对象的大小 内存对齐规则 类的由来 在C语言中我们有自定义类型的struct xff0c
  • 类的默认成员函数——上

    类的默认成员函数 默认成员函数构造函数构造函数由来构造函数特征默认构造函数特征总结 xff1a 析构函数特征 拷贝构造默认拷贝构造总结 C 43 43 中如果一个类中什么成员都没有 xff0c 简称为为空类 空类中什么都没有吗 xff1f
  • 进程控制块

    进程控制模块 查看进程PCB内部构成标识符ppid 状态优先级查看优先级方式优先级确定原理调整优先级nice值范围 程序计数器内存指针上下文数据时间片上下文数据 I xff0f O状态信息记账信息 查看进程信息 进程 xff1a 加载到内存
  • 模拟实现stack/queue

    模拟实现stack queue stack大体框架接口函数实现 queue大体框架接口函数 stack 之前的博客中介绍了栈和队列的相关功能 xff0c 这里我们模拟实现一个栈和队列 大体框架 由于栈的特殊性 xff0c 栈不支持迭代器访问