【C++】stack与queue的模拟实现

👀樊梓慕:个人主页

 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》

🌝每一个不曾起舞的日子,都是对生命的辜负


前言

stack与queue的实现比较简单,本篇不会有太大的篇幅,但值得我们学习的是『 适配器』的概念。


欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。

=========================================================================

GITEE相关代码:🌟fanfei_c的仓库🌟

=========================================================================


1.适配器

stack与queue并不属于容器,而是『 适配器』。

适配器其实就是对已经存在的容器进行封装得到的。

在STL标准库中,stack与queue的底层默认使用deque容器。

 deque我们本篇文章不介绍,大家只需要知道他类似于vector与list,并且deque具有他们两个容器的特性即可。

适配器就像是我们的充电器,我国家庭电路电压为220v,但却可以通过不同的电源适配器达到不同的功率。

模板参数的这一用法我们上篇文章提到过:

当我们不传模板参数时,stack与queue都默认使用deque容器来构建栈或者队列,但我们也可以自己设定模板参数,就如同之前学习『 数据结构』时,栈或者队列既有顺序结构也有链式结构一样,在『 C++』中,我们只需要设定模板参数,即可实现顺序栈、顺序队列或者链栈、链队列,这就体现出了模板参数的妙用。


2.模拟实现源码

2.1stack

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.2queue

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;
};

2.3如何实现底层基于vector或list的栈或队列呢?

其实非常简单,就是将对应的模板参数设定为vector或list即可,比如:

int main()
{stack<int,vector<int>> s;s.push(1);s.push(2);s.push(3);s.push(4);while (!s.empty()){cout << s.top() << " ";s.pop();}cout << endl;return 0;
}

另外注意:

  • 函数参数传参是在『 使用时传参』,传递的是『 对象』;
  • 模板参数传参是在『 编译时传参』,传递的是『 类型』。

 

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

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

相关文章

快速上手Flask(三) 在 Flask应用中使用Flask-SQLAlchemy(flask SQLAlchemy模型对象如何json序列化输出)

文章目录 快速上手Flask(三) 在 Flask应用中使用Flask-SQLAlchemySQLAlchemy什么是Flask-SQLAlchemyFlask-SQLAlchemy 和 SQLAlchemy的区别&#xff1f;Flask-SQLAlchemy基本使用安装&#xff1a;快速入门创建模型flask模型对象如何json序列化输出 数据库的增删改查 工作常用总…

轮胎侧偏刚度线性插值方法

一、trucksim取数据 步骤一 步骤二 二、数据导入到matlab中 利用simulink的look up table模块 1是侧偏角&#xff1b;2是垂直载荷&#xff1b;输出是侧向力。 侧向力除以侧偏角就是实时的侧偏刚度。

【LeetCode】每日一题 2024_1_21 分割数组的最大值(二分)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;分割数组的最大值题目描述代码与解题思路 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 今天是 hard&#xff0c;难受&#xff0c;还好有题解大哥的清晰讲解 题目&a…

C#实现基于Word保护性模板文件的修改

目录 制作一个保护性模板文件 给文件设置保护密码 设计模板内容 限制编辑 进一步的需求 范例运行环境 Office DCOM 配置 设计实现 进一步修改模板文件 设置和取消保护 遍历WORD内容控件 总结 制作一个保护性模板文件 在类似一些OA的自动化处理或审批类系统里&a…

一文读懂 c++ 容器

容器根据不同的使用场景和需求,有序序列、无序集合以及专门的适配器等各种形式。了解如何根据场景选择合适的容器并使用它们,是写出高效可读性强的 C++ 代码的关键所在,C++ 标准库提供了一系列标准容器来存储和操作数据集合。这些容器被设计为通用、高效且易于使用。它们都是…

【 文本到上下文 #4】NLP 与 ML

一、说明 欢迎回到我们的 NLP 博客系列&#xff01;当我们进入第四部分时&#xff0c;焦点转移到机器学习 &#xff08;ML&#xff09; 和自然语言处理 &#xff08;NLP&#xff09; 之间的动态相互作用上。在本章中&#xff0c;我们将深入探讨 ML 和 NLP 的迷人协同作用&#…

CGAL::Plane_3<K>平面结构

CGAL::Plane_3<K> 是 CGAL&#xff08;Computational Geometry Algorithms Library&#xff09;中的一个类&#xff0c;代表三维空间中的一个平面。在这个类中&#xff0c;K 是一个内核类型参数&#xff0c;通常代表了一组几何对象的类型和操作&#xff0c;比如点、向量、…

【Linux】Shell 命令以及运行原理

Shell 命令以及运行原理 当用户登录 Linux 系统的时候&#xff0c;系统会给用户创建一个新的进程&#xff0c;一般叫做 bash&#xff08;命令行解释器&#xff09;。 Linux 严格意义上说的是一个操作系统&#xff0c;我们称之为 “核心&#xff08; kernel &#xff09;” &…

如何在 Linux 服务器上设置定时任务?

定时任务&#xff0c;也称为计划任务或cron作业&#xff0c;是在指定的时间间隔内自动执行特定任务的一种方法。在Linux服务器上设置定时任务可以帮助您自动化许多常见的系统管理任务&#xff0c;例如备份数据、清理日志文件、发送通知等。下面是在Linux服务器上设置定时任务的…

Leetcode 3013. Divide an Array Into Subarrays With Minimum Cost II

Leetcode 3013. Divide an Array Into Subarrays With Minimum Cost II 1. 解题思路2. 代码实现 题目链接&#xff1a;3013. Divide an Array Into Subarrays With Minimum Cost II 1. 解题思路 这一题的话思路上的话我一开始是想着偷懒直接用动态规划&#xff0c;结果果然还…

Kafka 问题排查

订单宽表数据不同步 事情的起因是专员在 ze app 上查不到订单了&#xff0c;而订单数据是从 mysql 的 order_search_info 查询的&#xff0c;order_search_info 表的数据是从 oracel 的 BZ_ORDER_INFO 表同步过来的&#xff0c;查不到说明同步有问题 首先重启&#xff0c;同步…

ICMP控制消息 汇总

控制消息由 类型 字段中的值标识。代码 字段给出了消息的附加上下文信息。自协议首次引入以来&#xff0c;一些控制消息已被弃用。 重要的ICMP Control Message控制信息 类型码状态描述0 –回声回复&#xff1a;140回声回复&#xff08;用于ping&#xff09;1和2未分配已预留3 …

0004.电脑开机提示按F1

常用的电脑主板不知道什么原因&#xff0c;莫名其妙的启动不了了。尝试了很多方法&#xff0c;没有奏效。没有办法我就只能把硬盘拆了下来&#xff0c;装到了另一台电脑上面。但是开机以后却提示F1&#xff0c;如下图&#xff1a; 根据上面的提示&#xff0c;应该是驱动有问题…

Spring Security工作原理(三)

在认证之间保存请求 如处理安全异常中所示,当请求没有认证且需要认证资源时,需要保存请求以便在认证成功后重新请求受保护的资源。在Spring Security中,这是通过使用RequestCache实现来保存HttpServletRequest来实现的。 RequestCache HttpServletRequest被保存在Request…

可替代Allegro A3901的国产GC3901 5V H 桥驱动器,驱动电流能力更强,且低成本,大电流

步进电机驱动的应用方案目前市场上大多选用国外品牌的电机驱动器&#xff0c;其中ALLEGRO的A3901在这一块的应用很广泛。但是由于市场越来越成熟&#xff0c;当前对于产品开发成本要求也越来越低&#xff0c;国产品牌也推出了相应的镜头驱动器&#xff0c;因此ALLEGRO的A3901已…

Redis和RediSearch的安装及使用

1. 安装要求 ReadiSearch要求Redis的版本在6.0以上RediSearch 要求使用 GNU Make 4.0 或更高版本 2. Redis的安装 查看redis的版本&#xff1a; redis-server --version或者&#xff0c;如果你已经启动了Redis服务器&#xff0c;你也可以使用redis-cli工具来获取版本信息&a…

Win10/11中VMware Workstation设置网络桥接模式

文章目录 一、添加VMware Bridge Protocol服务二、配置桥接参数1.启用系统Device Install Service服务2.配置VMware 需要确认物理网卡是否有添加VMware Bridge Protocol服务 添加VMware Bridge Protocol服务 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参…

枚举类型有着一篇足以

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 1.关键字enum的定义 enum是C语言中的一个关键字&#xff0c;enum叫枚举数据类型&#…

helm 一键部署

helm HPA rancher 安全机制 k8s的核心功能&#xff1a;组件功能 k8s的网络 命令行基本的增删改查 deployment statefulsets 挂载卷&#xff1a;emptyDir&#xff0c; hostPath&#xff0c; nfs pv pvc 动态pvc必问 configmap ingress hpa pod 的自动伸缩 helm 什么是hel…

python opencv 图片缺陷检测(讲解直方图以及相关系数对比法)

一、利用直方图的方式进行批量的图片缺陷检测&#xff08;方法简单&#xff09; 二、步骤&#xff08;完整代码见最后&#xff09; 2.1灰度转换&#xff08;将原图和要检测对比的图分开灰度化&#xff09; 灰度化的作用是因为后面的直方图比较需要以像素256为基准进行相关性比…