【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.hqwc.cn/news/422207.html

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

相关文章

如何在CentOS使用docker部署青龙面板并实现无公网ip远程访问

文章目录 一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用。本教程使用Docker部署青龙&#xff0c;如何安装Docker详见&#xff1a; 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 青龙…

charles mac抓包unknown问题

第一步&#xff1a;mac上安装Charles后&#xff0c;mac安装证书&#xff1a; 第二步&#xff1a;mac上信任证书 第三步&#xff1a;手机上安装证书 安装提示&#xff1a;电脑上通过help–>SSLProxying–> Install Charles Root Ceriticate on a Mobile Device or Remote …

智能手机维修市场分析:还存在着巨大的潜在市场

2022年&#xff0c;中国智能手机市场出货量仅2.86亿台&#xff0c;回到十年前的水平&#xff0c;同比下降13.2%&#xff0c;创有史以来最大降幅。 2010-2022年&#xff0c;全球智能手机出货量规模呈现先上升后趋于平稳的趋势。2016年&#xff0c;全球手机出货量达到14.73亿台&a…

动态规划——数字金字塔【集训笔记】

题目描述 观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。 在上面的样例中,从13到8到26到15到24的路径产生了最大的和86。 输入 第一个行包含R(1≤ R≤…

Verilog基础:强度建模与net型信号的多驱动问题(三)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 四、一般情况下的net型信号的线与组合&#xff08;线网多驱动&#xff09; 在Verilog基础&#xff1a;强度建模与net型信号的多驱动问题&#xff08;二&#xff0…

如何无公网ip实现SSH远程访问本地局域网openEuler系统?

文章目录 1. 本地SSH连接测试2. openEuler安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 欧拉操作系统(openEuler, 简称“欧拉”)是面向数字基础设施的操作系统,支持服务器、云计算、边缘openEuler是面向数字基础设施的操作系…

Linux与windows互相传输文件之rzsz命令

文章目录 关于rzsz安装软件使用命令方法一&#xff1a;直接拖拽方法二&#xff1a;直接在终端输入rz 关于rzsz 这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件 安装完毕之后可以通过拖拽的方式将文件上传过去 首先看一下我们的机器可以使用网络吗&#xff…

python强大的hook函数

什么是hook&#xff1f; 钩子函数&#xff08;hook function&#xff09;&#xff0c;可以理解是一个挂钩&#xff0c;作用是有需要的时候挂一个东西上去。具体的解释是&#xff1a;钩子函数是把我们自己实现的hook函数在某一时刻挂接到目标挂载点上。 hook应用场景&#xff…

SCT9431FSAR:3.8V-36V输入,3A同步降压DCDC转换器,具有EMI降低功能;替代AP63356/7

• 3.8V-36V宽输入电压 • 高达3A的连续输出负载电流 • EMI降低 o 专有的门设计&#xff0c;用于交换节点无振铃 o 扩频&#xff08;FSS&#xff09; • 轻负载条件下具有22uA静态电流的脉冲跳过模式&#xff08;PSM&#xff09; o 在1mA轻负载下效率高达79% o 在10mA轻负载…

负载均衡-Ribbon-自定义负载均衡算法

1.Ribbon 是什么 SpringCloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具主要功能是提供客户端的软件负载均衡算法&#xff0c;将 Netflix 的中间服务处连接在一起Ribbon的客户端组件提供一系列完整的配置项&#xff0c;如&#xff1a;连接超时、重试等。简…

AlmaLinux 8.9 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

「优选算法刷题」:在排序数组中查找元素的第一个和最后个位置

一、题目 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&a…