八大设计模式:适配器模式实现栈的泛型编程 | 通用数据结构接口的秘诀(文末送书)


在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《C++干货基地》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!

引入

  哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作为一门篇底层的一种语言,世面的免费课程大多都没有教明白。所以本篇专栏的内容全是干货让大家从底层了解C++,把更多的知识由抽象到简单通俗易懂。

⛳️ 推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

  • 引入
  • ⛳️ 推荐
  • 一、什么是适配器模式
    • 1.1 适配器模式的简介
  • 二、以往我们实现栈的方法
    • 2.1 什么是泛型编程?
    • 2.2 C++中的泛型编程有哪些
  • 三、更灵活的栈实现
    • 3.1 栈的结构设计
    • 3.2 栈的实现
  • 四、图书推荐《Docker与Kubernetes容器运维实战》
    • 4.1 内容简介
    • 4.2 作者简介
    • 4.3 读者对象
    • 4.4 购买连接
  • 六、 粉丝福利&参与规则

一、什么是适配器模式

1.1 适配器模式的简介

说起适配器不知道大家第一个想到是什么,每次适配器这个词在我们生活中其实很常见手机的电源适配器就很形象可以不管什么接口的手机都可以完美的适配到什么插座上。

而在软件工程中的设计模式,适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口

在这里插入图片描述

二、以往我们实现栈的方法

  • C语言栈的实现

在以前我们都是选择顺序表实现的因为栈的后进先出但是这是面向过程编程在C++中是面向对象编程,而且有了模版那么我们就要考虑泛型编程了

2.1 什么是泛型编程?

实质上就是不使用具体数据类型(int、double、float等),而是使用一种通用类型来进行程序设计的方法,泛泛的描述一下数据,这个方法可以大规模的减少程序代码的编写量。

泛型(Generics) 是一个非常重要的概念。 它提供了一种在编译时期进行类型检查的机制,使得我们能够创建具有通用行为的类、接口和方法,以适应不同类型的数据。 通过使用泛型,我们可以提高代码的复用性、类型 安全 性以及可读性

2.2 C++中的泛型编程有哪些

C++最成功的就是模版了,有了模版参数我们就可以想或者印刷一样不用管字是怎么排列的直接使用模版生成就好了

在这里插入图片描述

  • 其中最巨代表性的就是STL的库不管使用什么数据类型我们的 STL库都能匹配使用今天我们要模拟实现的 栈 (stack) 就是其中的一部分下面我们就来使用泛型来实现一下栈吧。

三、更灵活的栈实现

C++在有了模版之后就可以说有了革命行性的意义,使得我们在书写一个库时不用担心 类型不匹配,模版可以解决一切类型问题。而这就是泛型编程

  • 所以我们在写栈的时候,就可以参考模版来写一下
  • 以前我们的数据类型都是写死的,使用模版的多参数就完美的解决了这个问题

3.1 栈的结构设计

前面看了以前我们的栈是用一个数组来实现的,但是如果我们想要用 链表呢?

  • 这样我们就可以用模版定义一个默认容器我们可以传也可以不传
template<class T, class Container = vector<T>>
	class stack
	{
	public:
		stack()
		{}
		private:
		Container _con;
	};

这里的构造函数直接调用自定义类型的构造函数,就不需要我们去书写了

3.2 栈的实现

既然选择了容器接口那么接下来就简单了,使用容器的接口去二次封装一个栈的接口根本不需要担心底层的实现。

// 设计模式
// 适配器模式 -- 转换
// stack<int, vector<int>> st1;
// stack<int, list<int>> st2;

template<class T, class Container = vector<T>>
class stack
{
public:
	stack()
	{}

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

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

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

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

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

private:
	Container _con;
};

四、图书推荐《Docker与Kubernetes容器运维实战》

帮助读者用最短的时间掌握Docker与K8s运维技能

在这里插入图片描述

4.1 内容简介

随着云计算和容器技术的发展,Docker与Kubernetes已经成为各个企业首选的部署工具,使用它们可以提高系统的部署效率和运维能力,降低运维成本。本书是一本为初学者量身定制的Docker与Kubernetes容器技术入门书,要求读者具有Linux基础。

《Docker与Kubernetes容器运维实战》共22章,第1~11章主要内容包括全面认识Docker、初步体验Docker、Docker基本管理、Docker的仓库、Docker数据管理、Dockerfile、Docker日志、Docker Compose、Docker Swarm、Docker Portainer、Docker 实战应用;第12~22章主要内容包括Kubernetes初步入门、安装Kubernetes、Kubernetes命令行工具、运行应用、通过服务访问应用、存储管理、Kubernetes软件包管理、Kubernetes网络管理、Kubernetes Dashboard、Kubernetes安全、Kubernetes集群管理。

《Docker与Kubernetes容器运维实战》内容详尽、示例丰富,是广大Docker与Kubernetes入门读者的必备参考书,同时也非常适合作为高等院校或高职、高专计算机及相关专业的教材使用。

4.2 作者简介

在这里插入图片描述

4.3 读者对象

  • Docker与Kubernetes初学者

  • 运维工程师

  • 前端开发人员

  • 后端开发人员

  • 快速部署研发、测试、生产环境的IT人员

  • 对容器和容器管理有兴趣的高校学生

4.4 购买连接

《Docker与Kubernetes容器运维实战》: https://item.m.jd.com

六、 粉丝福利&参与规则

  • 参与方式:关注博主、点赞收藏评论,任意评论(每人最多评论三次)

  • ⛳️本次送书5取决于阅读量,阅读量越多,送的越多

  • 📆 活动时间至:2024-5-19 20:00:00 | 随机抽取由博主动态公布抽奖结果

如有特别需要的同学可添加博主微信进入粉丝福利群发放福利哦!

🔥 注:活动结束后,会私信中奖粉丝的,各位注意查看私信哦!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在阿里云申请免费SSL证书(三个月有效)

SSL证书主要用于建立Web服务器和客户端间可信的HTTPS协议加密链接&#xff0c;以防止数据在传输过程中被篡改&#xff0c;避免信息泄露。阿里云提供了多种品牌和类型的SSL证书&#xff0c;以满足不同用户的需求。您可以根据自己的预算、域名类型以及网站类型&#xff0c;选择购…

蓝桥杯练习系统(算法训练)ALGO-941 P0601字符删除

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 编写一个程序&#xff0c;先输入一个字符串str&#xff08;长度不超过20&#xff09;&#xff0c;再输入单独的一个字符ch&#xff0c…

45.WEB渗透测试-信息收集-域名、指纹收集(7)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;计算机王-CSDN博客 WEB指纹&#xff1a;Web指纹也叫web应用指纹。由于所使用的工具、技术…

【全开源】国际版JAVA多商户运营版商城系统源码地摊兄源码多商户源码社交电商源码支持Android+IOS+H5

国际版多商户运营版商城系统&#xff1a;打造全球电商新生态 随着全球化趋势的深入发展&#xff0c;跨境电商已成为推动世界经济增长的重要力量。为了满足不同国家、地区商户的多样化需求&#xff0c;我们隆重推出“国际版多商户运营版商城系统”&#xff0c;旨在为全球商户搭…

智能监控与安全管理:安全帽检测算法的实践与应用

在工地、煤矿等高危工作环境中&#xff0c;安全帽的佩戴至关重要。安全帽能够有效防止因坠落物体或碰撞等引起的头部伤害&#xff0c;从而保护工作人员的生命安全。然而&#xff0c;传统的检查人员佩戴安全帽的方式主要依赖于现场监督和巡查&#xff0c;这种方法不仅耗费大量人…

Linux修炼之路之gcc/g++,动静态链接及动静态库

目录 一&#xff1a;Linux编译器-gcc/g 预处理-编译-汇编-链接 1.预处理 2.编译 (生成汇编) 3.汇编(生成机器可识别代码) 4.链接(生成可执行文件或库文件) 三:动静态链接和动静态库 动静态库 动静态链接 1.动态链接 2.静态链接 3.注意点 4.各自优缺点 5.ldd和fil…

杀杀杀杀杀杀杀杀杀

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。 …

GRFB-UNet:一种新的多尺度注意力网络,用于铺路分割

不同场景下的带注释的触觉铺装示例: GRFB-UNet网络结构: GRFB模块的结构: 铺路在视障人士的旅行中起着至关重要的作用。因此,识别铺装的形状和位置以支持视障人士的移动性是相当有意义的,而视觉分割技术就适合这项任务。为了有效提高触觉铺装分割的精度和鲁棒性,…

Netty核心组件介绍

Netty是一款用于创建高性能网络应用程序的高级框架。Netty的核心组件如下&#xff1a; Channel回调Future事件和ChannelHander Channel channel是Java NIO的一个基本构造。可以把Channel看作是传入或传出数据的载体。它可以被打开或关闭&#xff0c;连接或断开连接。 回调 …

揭秘抖音快速涨10000有效粉的方法——巨量千川投流打造真实粉丝快速增长

随着短视频平台的流行&#xff0c;越来越多的用户开始在抖音上展示自己的才艺和生活。然而&#xff0c;在这个庞大的用户群体中如何迅速地涨粉成为了抖友们普遍关注的问题。今天&#xff0c;我们将揭秘一种被全网搜索的抖音快速涨粉方法——巨量千川投流&#xff0c;官方真实流…

揭秘!你的电商产品为何滞销?同行火爆销售的7大原因!

同样做电商&#xff0c;但自家产品销量不如竞对同行&#xff0c;可能的原因有多种&#xff0c;以下是店雷达总结7个可能的原因和对策&#xff1a; 一、市场竞争分析不足 未能准确识别并分析竞争对手的产品、定价、营销策略等关键信息&#xff0c;导致自身产品无法脱颖而出。 …

深度解析YOLOV9,目标检测算法(附论文和源码)|

目录 一、YOLOV9 1、概述&#xff1a; 2&#xff0c;论文摘要&#xff1a; 输入数据在前馈过程中可能会有不可忽略的信息丢失。这种信息丢失会导致梯度流出现偏差&#xff0c;而梯度流又被用于更新模型。上述问题会导致深度网络在目标和输入之间建立不正确的关联&#xff0c…

算法分析与设计复习__递归方程与分治

总结自&#xff1a;【算法设计与分析】期末考试突击课_哔哩哔哩_bilibili 1.递归&#xff0c;递归方程 1.1递归条件: 1.一个问题的解可以分解为几个子问题的解&#xff1b; 2.这个问题与分解之后的子问题&#xff0c;除了数据规模不同&#xff0c;求解思路完全一样; 3.存在…

【Git教程】(十八)拆分大项目 — 概述及使用要求,执行过程及其实现,替代解决方案 ~

Git教程 拆分大项目 1️⃣ 概述2️⃣ 使用要求3️⃣ 执行过程及其实现3.1 拆分模块版本库3.2 将拆分出的模块作为外部版本库集成 4️⃣ 替代解决方案 通常软件项目都是由单体小型系统开始的&#xff0c;在开发过程中项目规模和团队人员不断扩大&#xff0c; 将项目模块化会显得…

Redis-持久化操作-AOF

持久化操作-AOF AOF是什么&#xff1f; 以日志的形式来记录每个写操作&#xff0c;将Redis执行过的所有写指令记录下来&#xff08;读操作不记录&#xff09;&#xff0c;只允许加文 件但不可以改写文件&#xff0c;redis启动之初会读取该文件重新构建数据&#xff0c;换言之…

git入门操作

一、介绍 Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds创建&#xff0c;用于有效、高速地处理从小到大的项目版本管理。 二、注册Git代码托管平台账号 以下几个平台可供选择&#xff1a; Gitee: https://gitee.com/(国内) Gitee&#xff08;码云&…

从丢失到找回:手机相册恢复实战教程

“之前因为手机延迟把三千多张相片都删了&#xff0c;花了几个小时找文档&#xff0c;最后也没找到。对于爱拍照的朋友来说&#xff0c;照片被误删或不见真的会超级难过&#xff01;请问大家有什么好方法能够恢复照片吗&#xff1f;” 在数字时代&#xff0c;手机相册成为了我…

PLC的ST语言实现IIR butterworth低通滤波器

参考 Butterworth Filter Design in C – The Code Hound matlab代码&#xff0c;创建一个fc0.1的4阶butterworth低通滤波器。 format long[b,a] butter(4,0.1,low)input1 [1,2,3,1,2,3,1,2,3,0,0]; output filter(b,a,input1)过滤input1的结果为 output Columns 1 throu…

嵌入式基础课程配套电机FOC伺服电机开发板AT32F403磁编码IMU姿态

嵌入式基础课程配套电机FOC伺服电机开发板AT32F403磁编码IMU姿态 带你入门嵌入式有二十多年开发经验的老技骨做技术支持整个开发包硬件包括电机2205&#xff0c;支持12V到24V宽输入&#xff0c;配套12V2A电源。包装原理图和PCB嵌入式软件嵌入式基础课程 带你入门嵌入式 电机FO…

免费SSL证书怎么签发

大家都知道SSL证书好&#xff0c;作用大&#xff0c;安全性高&#xff0c;能加权重&#xff0c;等保必须的参考值。但是如何选择合适且正确的证书也是至关重要的&#xff0c;网站更适合单域名证书、多域名证书、泛域名证书、还是多域名通配符证书。 首先大家要清楚&#xff0c…