C++ stack queue 的模拟实现

1.为什么选择 deque 作为 stackqueue 的默认容器呢?

stack 是一种后进先出的特殊线性数据结构,因此只要具有 push_back()pop_back() 操作的线性结构,都可 以作为 stack 的底层容器,比如 vectorlist 都可以;

queue 是先进先出的特殊线性数据结构,只要具有 push_back和pop_front操作的线性结构,都可以作为queue的底层容器,比如list。但是 STL 中对 stackqueue 默认选择deque 作为其底层容器,主要是因为:

  1. stackqueue 不需要遍历(因此 stackqueue 没有迭代器),只需要在固定的一端或者两端进行操作。
  2. 在stack中元素增长时,dequevector 效率高(扩容时不需要搬移大量数据);deque 中的元素增长时,deque 不仅效率高,而且内存使用率高。 结合了deque 的优点,而完美的避开了其缺陷。

➡️deque 的使用:c++ deque 的使用-CSDN博客

2. 模拟实现 stack

前面提到,stack 的实现是有一个默认的容器:deque 的,因此在 stack 模板参数列表中就一定有一个模板参数,接收 stack 的底层使用哪一个容器来实现的!因此我们就可以定义出 stack 的基本结构啦!😄

namespace Tchey
{template<class T, class Container = deque<T>>class stack{public:private:Container _con;};
}

2.1 默认构造函数

默认构造函数可以不用写哈,我们的 stack 类有一个自定义类型的成员,会调用自定义类型成员的默认构造函数。

2.2 void push(const T& val)

这个接口的实现,我们只需要调用 Container 对应的接口就行了!

void push(const T& val)
{_con.push_back();
}

2.3 void pop()

删除栈顶的元素。

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

2.4 T& top()

查看栈顶的元素。

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

2.5 bool empty()

判断栈是否为空。

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

2.6 size_t size()

获取栈中元素的个数。

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

3. 模拟实现 queue

模拟实现 queue 的方法跟模拟实现栈是一毛一样的哈!😸

namespace Tchey
{template<class T, class Container = deque<T>>class queue{public:// 队尾入数据void push(const T& val){_con.push_back(val);}// 队头出数据void pop(){_con.pop_front();}// 获取队头数据T& front(){return _con.front();}// 获取队尾数据T& back(){return _con.back();}// 判断队列是否为空bool empty(){return _con.empty();}// 获取队列中元素的个数size_t size(){return _con.size();}private:Container _con;};
}

在这里插入图片描述

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

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

相关文章

ch3_6多线程举例

作者丨billom 来源丨投稿 编辑丨GiantPandaCV 云端深度学习的服务的性能加速通常需要算法和工程的协同加速&#xff0c;需要模型推理和计算节点的融合&#xff0c;并保证整个“木桶”没有太明显的短板。 如何在满足时延前提下让算法工程师的服务的吞吐尽可能高&#xff0c;尽…

【论文阅读VLDB23】Online Schema Evolution is (Almost) Free for Snapshot Databases

Online Schema Evolution is (Almost) Free for Snapshot Databases 对snapshot DB来说可以几乎在线进行schema的演变。 ABSTRACT 在现有数据库系统中&#xff0c;对在线和事务模式演变的支持仍然具有挑战性。之前处理这种schema 演变基本是patches补丁的方式来做&#xff0…

【卷积神经网络】YOLO 算法原理

在计算机视觉领域中&#xff0c;目标检测&#xff08;Object Detection&#xff09;是一个具有挑战性且重要的新兴研究方向。目标检测不仅要预测图片中是否包含待检测的目标&#xff0c;还需要在图片中指出它们的位置。2015 年&#xff0c;Joseph Redmon, Santosh Divvala 等人…

物联网AI MicroPython传感器学习 之 mpu6050六轴陀螺仪传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 MPU6050是一款6轴运动传感器&#xff0c;它集成了3 轴MEMS 陀螺仪&#xff0c;3 轴MEMS加速度计&#xff0c;以及一个可扩展的数字运动处理器DMP&#xff08;Digital Motion Processor&#xf…

moviepy处理手机端图片旋转问题

1.手机拍摄的图片或者在ffmpeg处理的时候&#xff0c;会读取图片的元数据从而进行旋转 左边是拍摄的图片&#xff0c;右侧是进行处理以后得图片 video VideoFileClip(file_path) if video.rotation in (90, 270):video video.resize(video.size[::-1])video.rotation 0

YouTube博主数据信息资源

YouTube博主数据信息资源 &#x1f525;我是一位拥有10年编程经验的程序猿&#xff0c;为你带来一个全新的优质资源 &#x1f50d;您是否在寻找最新、最活跃的YouTube博主数据&#xff0c;以助力你的项目、营销或研究&#xff1f; 我们的数据&#xff0c;您的优势&#xff1a;…

ZYNQ连载05-Vitis更新xsa硬件配置

ZYNQ连载05-Vitis更新xsa硬件配置 1. 简述 在开发过程中&#xff0c;Vivado中硬件配置在开发过程中有所变动&#xff0c;Vitis需要根据Vivado生成的xsa文件&#xff0c;更新相应的BSP配置 2. 操作步骤

Node编写更新用户信息接口

目录 前言 定义路由和处理函数 验证表单数据 实现更新用户基本信息的功能 前言 继前面几篇文章&#xff0c;本文介绍如何编写更新用户信息接口 定义路由和处理函数 路由 // 更新用户信息接口 router.post(/userinfo, userinfo_handler.updateUserinfo) 处理函数 // 导…

【2023年冬季】华为OD统一考试(B卷)题库清单(已收录345题),又快又全的 B 卷题库大整理

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治递归…

【PC电脑windows-学习样例generic_gpio-ESP32的GPIO程序-基础样例学习】

【PC电脑windows-学习样例generic_gpio-ESP32的GPIO程序-基础样例学习】 1、概述2、实验环境3、 物品说明4、自我总结5、本次实验说明6、实验过程&#xff08;1&#xff09;复制目录到桌面&#xff08;2&#xff09;手动敲写&#xff08;3&#xff09;反复改错&#xff08;4&am…

时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测

时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-LSTM差分自回归移动平均模型结合长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Python实现ARIM…

SOLIDWORKS PDM 2024数据管理5大新功能

1. 改进的视觉内容 • 通过装配体可视化功能&#xff0c;在 SOLIDWORKS 中以图形方式查看零部件数据&#xff0c;如工作流程状态。• 使用特定图标迅速识别焊件切割清单零部件。 优点&#xff1a;重要数据和系统信息一目了然。 2.增强的数据保护和跟踪功能 •保护“包含”和…

代码随想录算法训练营第4天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交 、142.环形链表II

JAVA语言编写 24. 两两交换链表中的节点 谷歌、亚马逊、字节、奥多比、百度 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。…

Openssl数据安全传输平台010:jasoncpp 1.9.5编译及常用API- Windows/Centos8-含测试代码

文章目录 0. 代码仓库1 安装注意版本问题1.1 windows 下的安装1.1.1 使用cmake生成sln工程1.1.2 使用sln工程生成静态库 -Debug 1.2 Linux 下的安装1.2.1 安装jsoncpp1.2.2 旧版本0.10.x版本相关环境配置问题 2 Winsows环境下编译 c 测试文件&#xff1a; json-test.cpp2.1 配置…

nginx请求时找路径问题

nginx请求时找路径问题 你是否遇到过这样的情况&#xff1a; 当你安装了nginx的时候&#xff0c;为nginx配置了如下的location&#xff0c;想要去访问路径下面的内容&#xff0c;可是总是出现404&#xff0c;找不到文件&#xff0c;这是什么原因呢&#xff0c;今天我们就来解…

服务器数据恢复—nas硬盘故障导致raid6失效、存储无法访问的数据恢复案例

服务器故障&分析&#xff1a; 一台nas存储中有一组由十几块硬盘组建的raid6磁盘阵列。 nas存储中的raid6阵列成员盘出现故障离线&#xff0c;磁盘阵列崩溃&#xff0c;nas存储无法正常访问。 北亚企安数据恢复工程师将nas存储内的所有硬盘编号后取出&#xff0c;经过硬件工…

MGRE环境下的OSPF

实验拓扑 需求 1 R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2 R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c;R1为中心站点 3 所有私有网段可以互相通讯&#xff0c;私有网段使用OSPF完成。 IP规划 配置IP R1 # interface GigabitEt…

Kitex踩坑 [Error] KITEX: processing request error,i/o timeout

报错问题 2023/010/28 17:20:10.250768 default_server_handler.go:234: [Error] KITEX: processing request error, remoteService, remoteAddr127.0.0.1:65425, errordefault codec read failed: read tcp 127.0.0.1:8888->127.0.0.1:65425: i/o timeout 分析原因 Hert…

Ps:对象选择工具

对象选择工具 Object Selection Tool是 Photoshop 2020 版以后新增的选区工具&#xff0c;可用于自动选择图像中的对象或区域&#xff0c;如人物、汽车、宠物、天空、水、建筑物和山脉等。 快捷键&#xff1a;W 让对象选择工具自动检测并选择图像内的对象或区域&#xff0c;或者…