前言

本系列文章承接C语言的学习,需要有C语言的基础才能学会哦~
第8篇主要讲的是有关于C++的模板初阶
C++才起步,都很简单!!

目录

前言

模板初阶

基本语法

函数模板的实例化

显式实例化的作用

类模板

基本语法


模板初阶

模板,也就是函数模板,调用实例化后才会成为函数。

基本语法

没使用模板前,我们为了适配不同的数据类型,需要写三个甚至更多的Swap函数,但他们的逻辑是类似的,甚至完全一样

void Swap(int& left, int& right)
{int temp = left;left = right;right = temp;
}
void Swap(double& left, double& right)
{double temp = left;left = right;right = temp;
}
void Swap(char& left, char& right)
{char temp = left;left = right;right = temp;
}

代码1↑

使用模板后

//模板
template<typename T>
void Swap(T& left, T&right)
{T temp = left;left = right;right = temp;
}int main()
{int x = 0, y = 1;double m = 1.1, n = 2.2;//调用Swap(x, y);Swap(m, n);return 0;
}

代码2↑

typename是关键字也可以用class,两者有些许区别,后面再讲。
T为模板参数,可以有多个模板参数,逗号分隔,模板参数在实例化时可替换为数据类型,同一个模板参数只能替换为同一个数据类型。
调用时,编译器会根据传入参数推演,把T替换为对应的数据类型,由编译器帮助生成实例化函数。Swap(x,y)会实例化为代码1中的第一段Swap,Swap(m,n)会实例化为第二段Swap,调用的是不同的函数

函数模板的实例化

分为隐式实例化显式实例化

​//模板
template<typename T>
void Swap(T& left, T&right)
{T temp = left;left = right;right = temp;
}//隐式实例化
Swap(x, y);
Swap(m, n);
//或者自行强制类型转化
Swap(x, (int)n);
Swap((double)x, n);//显式实例化
Swap<int>(x, m);
Swap<double>(x, m);

隐式实例化:编译器根据实参推演模板参数的实际类型。
显式实例化:用尖括号<>指明模板参数的替换。

显式实例化的作用

T func(size_t n)
{return T;
}

如上函数,代码无法通过函数参数推演出模板参数要替换成的实际类型,因此需要显式实例化指明类型。

func<int>(2);

tips1:如果运行代码Add(2, 3),程序会调用哪段代码?

int Add(int a, int b)
{return a + b;
}template<class T>
T Add(T a, T b)
{return a + b;
}

会调用第一段代码,有现成的用现成的,减少推演的步骤,提高效率。
如果非要调用模板,那就运行代码Add<int>(2, 3),用显式实例化让程序使用模板

tips2:如果运行Add(1.1, 2),就运行第三段模板代码;如果运行Add(1.1, 2.2),就运行第二段模板代码

​
int Add(int a, int b)
{return a + b;
}template<class T>
T Add(T a, T b)
{return a + b;
}​template<class T1, class T2>
T1 Add(T1 a, T2 b)
{return a + b;
}

哪个方便用哪个。

类模板

与函数模板用法十分类似。

基本语法

template<typename T>
{
public:Stack(size_t capacity = 4){_array = new T[capacity];_capacity = capacity;_size = 0;}void Push(const T& data);private:T* _array;size_t _capacity;size_t _size;
};template<class T>
void Stack<T>::Push(const T& data)
{_array[_size++] = data;//········
}

同上:
是模板,不是实体,需要实例化
②分为隐式实例化显式实例化
同一模板参数替换的数据类型不同的时候,实例化出来的对象不属于同一类
哪个模板方便推演用哪个现成的就用现成的

tips:
类模板的声明与定义分离需要注意——定义的时候要带上模板参数

函数参数和模板参数十分类似,前者传递的是对象,后者传递的是数据类型。而且都可以用缺省参数

❤~~本文完结!!感谢观看!!接下来更精彩!!欢迎来我博客做客~~❤

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

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

相关文章

计算机网络——传输层(25王道最新版)

传输层传输层提供的服务进程 端口号 传输层协议之间的关系socket套接字有链接 VS 无连接 | 可靠 VS 不可靠UDP数据报及检验数据报格式检验方法TCPTCP协议的三大阶段TCP报文段格式&#xff08;很重要&#xff09;建立连接&#xff08;三次握手&#xff09;&#xff08;超级超级重…

羽毛球地板:从专业运动场景到全民健身市场的技术跃迁与产业重构

在全球体育产业向“专业化大众化”双轨并行的趋势下&#xff0c;羽毛球地板作为运动场景的核心基础设施&#xff0c;正经历从单一功能型产品向“性能优化场景适配智能管理”一体化解决方案的转型。据QYResearch统计&#xff0c;2031年全球羽毛球地板市场规模将达15.95亿元&…

R 语言查看类库源码的方法

你想查看 getGEO&#xff08;来自 R 语言 GEOquery 包&#xff09;的源码&#xff0c;这能帮你更好理解其工作原理和数据处理细节。由于 getGEO 是 R 函数&#xff0c;查看方法与 Python 有所不同。下面为你提供几种主要方法。 方法 适用场景 关键命令/操作 在 R 控制台直接查看…

SQL,posexplode 用法示例

示例1 -- 创建测试数据 WITH test_data AS (SELECT array(apple, banana, cherry) as fruits ) SELECT pos, col FROM test_data LATERAL VIEW posexplode(fruits) t AS pos, col;结果 pos | col ----|------- 0 | apple 1 | banana 2 | cherry示例2 -- 假设有一个用户表…

数据库造神计划第十天---数据库约束(1)

&#x1f525;个人主页&#xff1a;寻星探路 &#x1f3ac;作者简介&#xff1a;Java研发方向学习者 &#x1f4d6;个人专栏&#xff1a;《从青铜到王者&#xff0c;就差这讲数据结构&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此简单&a…

知微传感Dkam系列3D相机SDK例程篇:CSharp连接相机及保存数据

序言 写在前面 本人从事机器视觉细分的3D相机行业。编写此系列文章主要目的有&#xff1a; 1、便利他人应用相机&#xff0c;本系列文章包含公司所出售相机的SDK的使用例程及详细注释&#xff1b;2、促进行业发展及交流。 知微传感Dkam系列3D相机可以应用于定位分拣、焊接焊缝提…

[笔记] 系统分析师 第十二章 软件架构设计(分析师主要工作)

文章目录前言12.1 软件架构概述12.1.1 软件架构的意义12.1.2 软件架构的发展史12.2 软件架构建模12.3 软件架构风格12.3.1 软件架构风格概述12.3.2 数据流体系结构风格1.批处理体系结构风格2.管道-过滤体系结构风格12.3.3 调用/返回体系结构风格1.主程序/子程序风格2.面向对象体…

C++---存储周期,作用域,链接性

在C程序设计中&#xff0c;变量的行为不仅由其类型决定&#xff0c;还由存储周期&#xff08;变量在内存中存在的时间&#xff09;、作用域&#xff08;变量可被访问的代码范围&#xff09;和链接性&#xff08;变量在多文件程序中的可见性&#xff09;共同约束。 一、存储周期…

基于Python的商品爬取与可视化系统

本系统是基于Python的商品数据爬取与价格分析可视化系统&#xff0c;集成了数据爬取、数据存储、数据展示和可视化分析等功能。下面介绍一下系统主要功能和技术栈。一、主要功能&#xff1a;1、数据爬取功能 支持淘宝美妆商品数据爬取 可配置搜索关键词和爬取页数 实时显示爬取…

联邦学习过程中,了解清楚影响准确率的因素有哪些也很重要

影响模型准确率的因素有很多&#xff0c;下面是一些主要的因素&#xff0c;它们可以从数据、模型设计、训练策略以及超参数等多个层面来考虑。1. 学习率作用&#xff1a;学习率直接影响模型的训练速度、稳定性和最终表现。过高的学习率可能导致模型不收敛或收敛不稳定&#xff…

C# WPF中使用System.Management.Automation类调用Powershell报错解决办法

在WPF开发中&#xff0c;需要使用powershell进行自动化管理&#xff0c;以下为开发环境 1、.NET framework 4.7.2 2、VS2019 社区版 使用System.Management.Automation类 遇到的问题&#xff1a; 需要引用 System.Management.Automation类&#xff0c;但是在使用using指令时无法…

从 Pump.fun「直播」看热点币的生与死

在加密市场里&#xff0c;热点就是流量&#xff0c;流量就是价值。最近&#xff0c;Solana 生态的 Pump.fun 推出了「直播」板块&#xff0c;让发币这件事变得像看秀一样&#xff1a;一个个新币在链上实时登场&#xff0c;社区即时互动&#xff0c;玩家实时下注。这种形式不仅带…

图灵完备性:计算理论的基石与无限可能

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 1 图灵完备性的基本概念 图灵完备性&#xff08;Turing completeness…

HarmonyOS 5.0应用开发——V2装饰器@once的使用

【高心星出品】 文章目录V2装饰器once的使用概念一、核心作用与规则二、适用场景案例V2装饰器once的使用 概念 在鸿蒙ArkTS开发中&#xff0c;Once装饰器用于实现子组件仅接受父组件传递的初始值&#xff0c;后续父组件数据变化不再同步至子组件。以下是其核心要点&#xff1…

跨域请求:解决方案

一、跨域核心概念&#xff1a;同源策略与跨域定义 跨域问题的根源是浏览器的 同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;这是浏览器为保护用户数据安全而设置的核心安全限制。 1. 什么是 “同源”&#xff1f; “同源” 指的是两个 URL 的 协议、域名…

前端形态与样式风格:从古典到现代的视觉语言演进

目录前端形态与样式风格&#xff1a;从古典到现代的视觉语言演进概述1. 前端形态的演进&#xff1a;四种核心范式1.1 古典范式&#xff1a;语义化HTML与CSS1.2 组件化范式&#xff1a;模块化与复用1.3 响应式范式&#xff1a;多端适配1.4 动态范式&#xff1a;状态驱动视图2. 样…

用户系统从0到1:登录、权限、积分一网打尽

&#x1f464; 用户系统从0到1&#xff1a;登录、权限、积分一网打尽 副标题&#xff1a;Flask-Login 多级权限 积分会员系统实战 项目原型&#xff1a;https://madechango.com 难度等级&#xff1a;⭐⭐⭐☆☆ 预计阅读时间&#xff1a;20分钟 &#x1f3af; 引子&#xff1…

Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频内容理解与智能预警升级

Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频内容理解与智能预警升级引言&#xff1a;正文&#xff1a;一、传统安防监控的 “三重困局”&#xff1a;看不全、看不懂、反应慢1.1 人工盯屏 “力不从心”1.1.1 摄像头密度与人力的矛盾1.1.2 录像调阅 “马后炮”1.2…

OpenHarmony包管理子系统核心源码深度解读:从BundleManager到AMS,彻底打通应用安装、卸载与沙箱机制全链路

目录 架构概览 核心组件详解 包安装流程分析 包卸载流程分析 包更新流程分析 包信息存储机制 Launcher界面管控 开机默认系统应用安装机制<

简单聊聊神经网络中的反向传播

参考文章&#xff1a; 一文弄懂神经网络中的反向传播法——BackPropagation - Charlotte77 - 博客园 反向传播求偏导原理简单理解_反向传播偏导-CSDN博客 这篇文章是笔者在读完上述两篇参考文章后的整理或者说按照自己的理解进行的一些补充&#xff0c;强烈推荐先阅读上述两篇文…