【C++】手撕STL系列——stack,queue篇

前言

前面实现了string和vector,理所应当就该轮到stack和queue啦,本篇还会涉及到一个比较重要且听起来很厉害的概念——适配器模式

适配器模式

在之前数据结构初阶的学习过程中,我们学习的栈是由数组加上一些限制组成的容器,底层本质还是一个数组

队列则是由数组或者链表组成都行,再稍加一些限制

所以这里stack,queue的实现也应该复用一下之前学的vector和list

那么该怎么复用呢?模板的魅力在这里又体现出来了

这里通过两个模板参数,T代表一个空间所存的数据类型,Container代表要复用的数据容器

STL库里是用deque去实现stack和queue的,但是我们可以传vector或者list去改变底层容器

比如:stack< int,vector<int> >         queue< int,list<int> >

下面这两种虽然看起来和STL库里实现的一样,但是底层容器却已经是天差地别了

我们把这种模式就叫做适配器模式——本质其实也就是复用

这是本篇最为核心的知识,了解完这些后,实现其实也就是复用底层容器的函数接口罢了,没啥重点

stack自我实现

template<class T, class Container = deque<T> >class stack{private:Container _con;public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}T& top(){return _con.back();}const T& top()const{return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}};

queue自我实现

template<class T,class Container=deque<T>>class queue{private:Container _con;public:void push(const T&x){_con.push_back(x);}void pop(){_con.pop_front();}T& ftont(){return _con.front();}const T& ftont()const{return _con.front();}T& back(){return _con.back();}const T& back()const{return _con.back();}bool empty(){return _con.empty();}};

———————————————————————————————————————————

本文最重要的是去感悟所谓的适配器(复用),在后续的priority queue和反向迭代器的实现中也穿插了很多这种思想,可以减少代码的冗余性

希望对大家能有所帮助,也会继续输入c++相关知识

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

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

相关文章

Jenkins 内存占用

查看内存占用 # ps aux | grep 9090 root 130854 0.0 0.0 8900 708 pts/1 S 16:23 0:00 grep --colorauto 9090 root 4010748 0.2 30.7 5826500 2502884 ? Ssl Oct13 8:55 /usr/bin/java -Djava.awt.headlesstrue -jar /usr/share/java/jenkins…

C++入门之引用与内联函数

一、引用 1、初步理解 引用在语法上的理解就是起别名&#xff0c;用法就是在类型后面加&&#xff0c;例子&#xff1a;int a 1; int& b a; 上例所示&#xff0c;执行后&#xff0c;b就是a的别名&#xff0c;它们代表同一块空间&#xff0c;a的改变会影响b&#xff0…

哇喔,用这个平台制作电子画册,太简单了!

经常在朋友圈里看到可以在线浏览、类似仿真书的电子画册&#xff0c;总觉得这种制作起来很难&#xff0c;后来无意间看到朋友在制作&#xff0c;今天终于知道怎么做了&#xff01; 原来只用一个平台 FLBOOK&#xff01;&#xff01;就能做出来这种效果&#xff0c;像我这种电脑…

在vscode中配置git bash终端、git 源码管理

打开vscode文件->首选项->设置&#xff0c;打开设置搜索shell windows将以下配置添加到vscode中的settings.json中 注意&#xff1a; terminal.integrated.profiles.windows这个配置项是就是添加终端的terminal.integrated.defaultProfile.windows这个是配置默认选项的…

【计算机网络笔记】分组交换中的报文交付时间计算例题

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 系列文章目录题目解答 题目 在下图所示的采用“存储-转发”方式的分组交换网络中所有链路的数据传输速率为100 Mbps&#xff0c;分…

关于setInteval定时器在不同浏览器下表现差异

背景: 项目下用到websocket, 中间使用了setInterval 定时向服务端发送心跳包, 5s/次, 观察正常, 就将浏览器最小化后, 经过了两天, 周一过来查看, 咋才 5000次; 问题分析: 遇到这种简单的问题当然是请教一下GPT 来的最快最实际, 不出所料, 马上得到证实; chrome 88 版本之…

05、SpringBoot 集成 RocketMQ

目录 SpringBoot集成RocketMQ消息发送三种方式1、同步消息producer-springboot创建项目添加依赖配置文件同步消息发送代码启动类Test类 comsumer-springboot创建项目添加依赖配置文件同步消息消费代码 2、异步消息生产者消费者 3、一次性消息生产者消费者 消息消费两种方式1、集…

windows应用程序告警:帐户名与安全标识间无任何映射完成

目录 一、问题现象 二、问题解决 &#xff08;一&#xff09;官方方法 &#xff08;二&#xff09;问题定位 &#xff08;三&#xff09;问题处理 一、问题现象 今天巡检域控服务器时&#xff0c;发现告警如下&#xff1a; 安全策略已传播&#xff0c;但有警告信息。 0x534…

21.Hadoop在Windows环境下的下载安装配置超详细版

Hadoop在Windows环境下的下载安装配置超详细版 本文章所需下载安装软件&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1jIQyy0VHuPvQZ8-n_Zq0pg?pwd1017 hadoop的Windows化安装步骤是非常麻烦的&#xff0c;如果有一步出错将导致得充头从来。 环境配置 前置依赖1&…

苏东坡在元丰五年

北宋神宗元丰二年&#xff08;1079年&#xff09;十二月二十八日&#xff0c;震惊朝野上下的“乌台诗案” 正式结案&#xff1a;“祠部员外郎、直史馆苏轼责授检校水部员外郎、黄州团练副使&#xff0c;本州安置、不得签书公事&#xff0c;令御史台差人转押前去。” 元丰三年&…

外卖大数据案例

一、环境要求 HadoopHiveSparkHBase 开发环境。 二、数据描述 meituan_waimai_meishi.csv 是某外卖平台的部分外卖 SPU&#xff08;Standard Product Unit &#xff0c; 标准产品单元&#xff09;数据&#xff0c;包含了外卖平台某地区一时间的外卖信息。具体字段说明如下&am…

医院陪诊小程序:改善患者体验的技术创新

在数字化时代&#xff0c;医疗领域也迎来了革命性的变革。医院陪诊小程序作为这场变革的一部分&#xff0c;为患者和家属提供了前所未有的便捷和支持。这篇文章将探讨医院陪诊小程序的技术实现&#xff0c;以及如何使用代码来创建一个基本的医院陪诊小程序。 什么是医院陪诊小…

Archive Team: The Twitter Stream Grab

该集合不再更新&#xff0c;应被视为静态数据集。 从一般 Twitter 流中抓取的 JSON 的简单集合&#xff0c;用于研究、历史、测试和记忆的目的。这是“Spritzer”版本&#xff0c;最轻、最浅的 Twitter 抓取。不幸的是&#xff0c;我们目前无法访问流的洒水器或花园软管版本。 …

讲解嵌入式软件中超时机制设计

软件超时机制 1、背景 在嵌入式软件程序设计过程中中&#xff0c;经常会遇到超时&#xff08;或定时&#xff09;的处理情况&#xff0c;基本处理思想是在时间到的时候进行相关程序处理&#xff0c;下面介绍两种超时&#xff08;或定时&#xff09;的程序设计方案。 2、方案…

计算机网络 | 应用层

计算机网络 | 应用层 计算机网络 | 应用层应用层概述网络应用模型客户/服务器模型&#xff08;Client/Server&#xff0c;C/S&#xff09;P2P模型&#xff08;Peer-to-Peer&#xff09; 域名系统&#xff08;DNS&#xff09; 参考视频&#xff1a;王道计算机考研 计算机网络 参…

用shell批量修改文件名

场景一 给这些文件都加上.png后缀 #!/bin/bash for i in *; do mv "$i" "$i.png"; done 场景二 给某些文件按某种规则重命名,如按照1,2,3,4…命名,保留原格式 注: Shell中实现整数自增的几种方法示例,此处用于声明是数字类型的declare -i必须添加,否则…

浅谈工业企业能源管理软件的应用

安科瑞 崔丽洁 摘要&#xff1a;在工业企业中&#xff0c;能源是企业正常工作的根本保障&#xff0c;同时也是工业企业成本的主要构成部分。工业企业在相应的工作和使用的能源包括水、电、气等。在过去&#xff0c;企业对能源消耗的关注度比较低&#xff0c;更多的强调安全与保…

跨境电商系统商城源码定制开发的优势与需求

随着互联网的快速发展&#xff0c;跨境电商成为了全球贸易的重要方式之一。为了满足不同企业的需求&#xff0c;跨境电商系统商城源码定制开发应运而生。这种定制开发的方式可以帮助企业打造适合自己的电商系统&#xff0c;提供个性化的功能和服务&#xff0c;迎合不断变化的市…

CUDA学习笔记4——自定义设备函数

自定义设备函数 核函数&#xff1a;__global__修饰&#xff1b;在设备中执行&#xff1b;设备函数&#xff1a;__device__修饰&#xff1b;在设备中执行&#xff1b;只能被核函数或其他设备函数调用&#xff1b;主机函数&#xff1a;__host__修饰&#xff08;可省略&#xff0…

Empowering Low-Light Image Enhancer through Customized Learnable Priors 论文阅读笔记

中科大、西安交大、南开大学发表在ICCV2023的论文&#xff0c;作者里有李重仪老师和中科大的Jie Huang&#xff08;ECCV2022的FEC CVPR2022的ENC和CVPR2023的ERL的一作&#xff09;喔&#xff0c;看来可能是和Jie Huang同一个课题组的&#xff0c;而且同样代码是开源的&#xf…