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

news2024/11/15 21:45:46

在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《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.coloradmin.cn/o/1677595.html

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

相关文章

pyautogui 基本用法

pyautogui 是一个 Python 库&#xff0c;可以让你用 Python 脚本控制鼠标和键盘。它适用于自动化桌面图形用户界面&#xff08;GUI&#xff09;的任务&#xff0c;比如自动化测试、游戏脚本或任何需要模拟用户输入的程序。 以下是使用 pyautogui 的一些基础示例&#xff1a; 安…

地平线旭日X3开发板编译USB网卡驱动 AX88772B

由于使用的激光雷达是网口输出的&#xff0c; 为了不占用X3派已有的网口&#xff0c;接上去了一个绿联的usb网卡&#xff0c; 发现系统没有驱动&#xff0c;所以动手看看能不能自己编译一个 首先lsusb查看一下网卡型号 发现型号是AX88772B&#xff0c;去官网看了一下&#x…

低空经济之无人机

朋友们&#xff0c;今天来聊聊个超酷的话题——低空经济之无人机&#xff01; 无人机不仅让天空变得触手可及&#xff0c;还带来了无尽的商业可能&#xff0c;简直就是新时代的“空中小助手”啊&#xff01; 说到无人机&#xff0c;你们是不是也和我一样&#xff0c;脑海里立马…

【数据结构】队列的实现(链式)

文章目录 队列1.队列的概念及结构概念结构 2.队列的实现&#xff08;链式结构&#xff09;队列定义初始化队列入队出队获取队头元素获取队尾元素销毁队列判断队列是否为空队列有效个数 完整代码&#xff08;包含测试代码&#xff09;Queue.hQueue.ctest.c 队列 1.队列的概念及…

nodemon运行ts文件

https://juejin.cn/post/7035637086451400734 nodemon经常用来调试js文件&#xff0c;大家都是知道的&#xff0c;但是用nodemon来调试ts文件&#xff0c;大家试过吗&#xff1f; 如果直接运行nodemon index.ts是会报错的。 ts 复制代码 //index.ts console.log(1) 需要全局…

安全设备篇——抗DDOS设备

写在前面&#xff1a;up初研究这个设备的时候以为很容易&#xff0c;毕竟ddos嘛大家都懂&#xff0c;但是实际去找资料和研究的时候发现资料少的可怜&#xff0c;再加上大家知道ddos但大多没见过&#xff0c;万幸up的老东家某普有这类设备&#xff0c;和之前的同事沟通了一下还…

百望云钉钉:重塑财务智能化管理,助力企业实现数字化飞跃

近年来&#xff0c;数字技术正在深刻改变着企业生产方式和组织模式&#xff0c;企业面连着业务流程再造、经营模式创新等一系列建设挑战。 其中&#xff0c;财务部门从价值守护走向价值创造的过程中&#xff0c;展现出对企业经营与业务发展的巨大影响力。叠加金税四期税务改革&…

【稳定检索|主题广泛】2024年人文发展、媒体传播与文化交流国际会议(DMCCE 2024)

2024年人文发展、媒体传播与文化交流国际会议&#xff08;DMCCE 2024&#xff09; 2024 International Conference on Cultural Development, Media Communication, and Cultural Exchange 【会议简介】 2024年人文发展、媒体传播与文化交流国际会议将于成都举行。此次会议将…

计算机考研|408备考,如何6个月顺利上岸?经验+资料分享

如果是跨考的话&#xff0c;现在已经快六月份了&#xff0c;备考408时间真的很紧张 u1s1&#xff0c;我虽然一直推荐大家考408&#xff0c;但是也看情况&#xff0c;这种跨考&#xff0c;并且时间不充足的情况下&#xff0c;就最好不要去硬刚408了。408的复习量很大&#xff0…

【python数据预处理系列】使用Pandas的factorize()函数进行类别编码(整数编码)

在Pandas中&#xff0c;factorize()函数主要用于将分类变量转换为整数编码&#xff0c;这对于减少内存使用或准备数据进行某些统计分析非常有用。 它实际上是将列的唯一值映射到从0开始的整数序列上。 假设有一个DataFrame&#xff0c;其中一列包含一些类别值&#xff0c;你希望…

运筹说 第114期 | 其他排队模型简介

前面我们已经学习了一些排队模型&#xff0c;对排队系统有了基本认知&#xff0c;本期小编带大家继续来学习其他排队模型的内容。 一、有限源排队模型 顾客源为有限的这类排队问题的主要特征是顾客总数是有限的&#xff0c;如只有m个顾客。每个顾客来到系统中接受服务后仍回到…

jmeter指南:JMeter 安装、配置和性能测试

使用 JMeter 进行性能测试 1. Java 版本要求 JMeter 要求与 Java 8 或更高版本兼容。为了确保安全性和性能&#xff0c;建议安装最新次要版本的主要 Java 版本。鉴于 JMeter 仅使用标准 Java API&#xff0c;如果由于 JRE 实现问题而无法运行 JMeter&#xff0c;请不要提交错…

为Akamai 云平台上部署的资源配置2FA跳板机-上

为重要账户启用2FA&#xff0c;这几乎已经成为保护账户和数据安全的一种标准做法。无论登录常见应用或服务&#xff0c;或是访问企业内部资源&#xff0c;时不时都会需要进行2FA验证。那么当你在Akamai Connected Cloud云平台中部署了各类资源&#xff08;云计算、云存储、SaaS…

Java面试八股之float和double的区别

Java中float和double的区别 存储空间与精度&#xff1a; double&#xff1a;占据64位&#xff08;8字节&#xff09;存储空间&#xff0c;属于双精度浮点数。它可以提供较高的精度&#xff0c;通常能够精确表示大约15到17位十进制数字&#xff0c;适合用于需要较高精度计算或…

【面试必看】MyBatis部分

MyBatis 必读 Mybatis系列全解 MyBatis最全使用指南 MyBatis最全使用指南 1. JDBC java 操作数据库的原始方式就是 JDBC。 但是存在以下问题&#xff1a; 每次操作我们都要创建 connection、Statement 等一些对象&#xff0c;操作完还要关闭、销毁这些对象。 ResultSet …

【OSM】RDP资源无法访问

发布windows的远程桌面资源&#xff0c;web和rdp方式都不能访问&#xff0c;端口测试都正常&#xff0c;不经过堡垒机能正常连接服务器 1、将资源中rdp安全模式指定为rdp&#xff0c;并直接登录到服务器&#xff0c;打开【组策略】&#xff0c;依次展开计算机配置→Windows组件…

手撸XXL-JOB(四)——远程调用定时任务

Java Socket网络编程 网络编程是Java编程中的重要组成部分&#xff0c;包括服务端和客户端两部分内容。Socket是Java网络编程的基本组件之一&#xff0c;用于在应用程序之间提供双向通信&#xff0c;Socket提供了一种标准的接口&#xff0c;允许应用程序通过网络发送和接收数据…

分体工业读写器的适用场景有哪些?

工业读写器根据设计方式不同&#xff0c;可分为一体式读写器和分体式读写器&#xff0c;不同读写器特点不同&#xff0c;适用场景也不同&#xff0c;下面我们就一起来了解一下超高频分体读写器适用场景有哪些。 超高频分体读写器介绍 超高频分体读写器是一种射频识别(RFID)设…

SpringAI应用开发

一、人工智能简述 四次工业革命推动了人类社会发展和变革&#xff1a; 蒸汽时代&#xff0c;发生在18世纪60年代~19世纪中期&#xff08;大约是1760年到1860年&#xff09;&#xff0c;这一时期的特点是机械化生产和大规模生产。电气时代&#xff0c;发生在19世纪下半叶~20世纪…

一篇文章搞懂 SDN中Minint和Ryu的安装及使用

SDN 一、SDN介绍 一&#xff0e; 什么是SDN? SDN字面意思是软件定义网络&#xff0c;其试图摆脱硬件对网络架构的限制&#xff0c;这样便可以像升级、安装软件一样对网络进行修改&#xff0c;便于更多的APP&#xff08;应用程序&#xff09;能够快速部署到网络上。 如果把…