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


在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《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 | 随机抽取由博主动态公布抽奖结果

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

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

在这里插入图片描述

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

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

相关文章

Leetcode—3146. 两个字符串的排列差【简单】

2024每日刷题&#xff08;135&#xff09; Leetcode—3146. 两个字符串的排列差 实现代码 class Solution { public:int findPermutationDifference(string s, string t) {int maps[26];int mapt[26];for(int i 0; i < s.size(); i) {int idxs s[i] - a;int idxt t[i] …

Flutter+Getx仿小米商城项目实战教程又新增了Flutter调用原生地图

FlutterGetx仿小米商城项目实战教程基于Flutter3.x录制&#xff0c;课程紧贴企业需求&#xff0c;目前已完结176讲。教程所讲内容支持Android、Ios、华为鸿蒙OS&#xff0c;教程更新于2024年4月09日新增 Flutter 调用百度地图、新增Flutter充电桩项目地图实战。支持2024年3月29…

AXI GPIO IP核配置详解

AXI GPIO&#xff08;AXI General-Purpose Input/Output&#xff09;设计提供了一个通用的输入/输出接口&#xff0c;该接口连接到一个AXI4-Lite接口。AXI GPIO可以被配置为单通道或双通道设备&#xff0c;每个通道的位宽可以独立配置。 端口&#xff08;即GPIO引脚&#xff0…

02-WPF_基础(一)

1、基础 各模块类型 链接&#xff1a;如何&#xff1a;向 Viewbox 的内容应用 Stretch 属性 - WPF .NET Framework | Microsoft Learn WPF基础以及事件绑定与数据绑定的情况&#xff0c;&#xff0c;在学习XAML&#xff0c;数据结构以及一个项目学习平台来练手&#xff0c;网络…

儿童社交恐惧:关爱与引导,帮助孩子走出阴霾

引言 儿童的社交能力是其心理健康和全面发展的重要组成部分。然而&#xff0c;有些儿童会表现出社交恐惧&#xff0c;这种情况不仅影响他们的日常生活和学习&#xff0c;还可能对其长远发展产生不利影响。本文将探讨儿童社交恐惧的注意事项&#xff0c;并提供实用的建议和方法…

百面算法工程师 | YOLOv6面试考点原理全解析

本文给大家带来的百面算法工程师是深度学习目标检测YOLOv6面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的深度学习目标检测面试问题&#xff0c;并提供参考的回答…

压力给到 Google,OpenAI 发布 GPT-4o 来了

北京时间5月14日凌晨1点&#xff0c;OpenAI 开启了今年的第一次直播&#xff0c;根据官方消息&#xff0c;这次旨在演示 ChatGPT 和 GPT-4 的升级内容。在早些时候 Sam Altman 在 X 上已经明确&#xff0c;「我们一直在努力开发一些我们认为人们会喜欢的新东西&#xff0c;对我…

jar包安装成Windows服务

一、前言 很多年前写过一篇《使用java service wrapper把windows flume做成服务》的文章&#xff0c;也是把jar包安装成windows服务&#xff0c;今天介绍另外一种更简便的方案。 二、正片 这次使用的工具是 winsw&#xff0c;一个Windows服务包装器。下面看详细介绍 首先从g…

momentjs

Moment.js 是一个用于处理日期和时间的 JavaScript 库&#xff0c;它提供了许多方便的函数和方法来操作、格式化和解析日期时间。官网 常见用法 格式化日期时间&#xff1a;可以使用format方法将日期时间格式化为指定的字符串格式&#xff0c;例如YYYY-MM-DD HH:mm:ss。获取日…

中国CEO直播简史

图片&#xff5c;电影《教父》截图 ©自象限原创 作者丨罗辑 编辑丨程心 领导人爱对外发言这事&#xff0c;是中国的一个传统文化。 从乾隆爱往名画上盖章上&#xff0c;就可见一斑。 3Q大战时代&#xff0c;微博成了大佬“吵架”的战场&#xff0c;饭否变成了部分爱…

Digimat在电池壳体SMC复合材料成型工艺中的应用

SMC工艺介绍及挑战 SMC&#xff08;Sheet Molding Compound的缩写&#xff0c;即片状模塑料&#xff09;是一种复合材料制造工艺。该工艺可以有效地代替金属&#xff0c;实现车辆轻量化目标。该工艺不仅能够显著降低车身重量&#xff0c;而且设计灵活&#xff0c;操作简单、易…

社交媒体的探索者:探寻Facebook的发展历程

在当今数字化时代&#xff0c;社交媒体已经成为了人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为最具影响力的社交平台之一&#xff0c;其发展历程承载着无数的探索与创新。本文将深入探讨Facebook的发展历程&#xff0c;从其创立初期到如今的全球化影响&#xff0…

数据结构与算法学习笔记九---循环队列的表示和实现(C++)

目录 前言 1.为什么要使用循环队列 2.队列的顺序存储方式的实现 1.定义 2.队列初始化 3.销毁 4.清空队列 5.队列是否为空 6.队列长度 7.队头 8.入队 9.出队 10.遍历队列 11.完整代码 3.参考资料 前言 这篇文章介绍循环队列的表示和用法。 1.为什么要使用循环队…

OpenAI 重磅发布:ChatGPT Mac 桌面应用震撼上线!

OpenAI 重磅发布&#xff1a;ChatGPT Mac 桌面应用震撼上线&#xff01; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff0…

51单片机:点亮一个LED灯

1.新建工程 选择AT89C52&#xff0c;在Atmel下显示的是See Microchip 并不需要添加启动文件到文件夹中。 添加main.c文件&#xff0c;c比cpp效率高&#xff0c;.asm汇编即更底层 程序编写好后 nop(); 该函数在这个头文件里面 #include <INTRINS.H> #include <R…

Java JDK下载安装教程(2024年)

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

2024 Google I/O Android 相关内容汇总

2024 Google I/O Android 相关内容汇总 本次 Google I/O 的核心虽然是 AI &#xff0c;但是 Android 也是作为主要议题出现&#xff0c; Android 部分可以简单分为产品和开发相关内容&#xff0c;接下来主要介绍这两部分的相关更新。 重点开始开发相关&#xff0c;内容不少 产…

业务系统加固和安全设备加固

业务系统加固 业务系统包含哪些系统? 业务系统漏洞面临的风险 1web风险 2漏洞扫描&#xff0c;端口扫描 3系统漏洞 4逻辑漏洞 5 信息泄露 6拒绝服务 7口令爆破 加固方式&#xff1a; 在风险加上修复 1web漏洞&#xff1a; 包括csrf,xss&#xff0c;口令破解等等 修…

koa2 + jsonwebtoken + koa-jwt:实现node token验证

一、koa token生成、验证 koa-jwt官网 https://github.com/koajs/jwt 推荐一个koa-jwt学习文档&#xff1a; https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html jsonwebtoken方法添加 const { sign, verify } require(jsonwebtoken); const secretKey …

ICode国际青少年编程竞赛- Python-4级训练场-列表综合练习

ICode国际青少年编程竞赛- Python-4级训练场-列表综合练习 1、 Flyer[3].step(1) Flyer[7].step(2) Flyer[11].step(1) for i in range(4):Flyer[i * 2].step(1) Flyer[8].step(3)for i in range(3):Dev.turnRight()Dev.step(-5)2、 for i in range(5):Flyer[i5].step(Flyer[…