【06】C++ 模板初阶

文章目录

  • 🌈 Ⅰ 泛型编程
  • 🌈 Ⅱ 函数模板
    • 1. 函数模板概念
    • 2. 函数模板格式

🌈 Ⅰ 泛型编程

1. 泛型编程引入

  • 假设当前要实现交换两个变量的功能,那么就得根据实参的数据类型来对该函数进行重载。
  • 重载的函数只是数据类型不同而已,但是一旦要交换新类型的变量就得多重载一份函数。
  • 此时就需要使用 泛型编程 来将繁琐的流水线编程简单化。
void Swap(int& x, int& y)
{
	int tmp = x;
	x = y;
	y = tmp;
}

void Swap(double& x, double& y)
{
	double tmp = x;
	x = y;
	y = tmp;
}

void Swap(char& x, char& y)
{
	char tmp = x;
	x = y;
	y = tmp;
}

2. 泛型编程概念

  • 编写的代码与数据类型无关,任何数据类型都能使用编写的功能称为泛型编程。
  • 泛型编程是代码复用的一种手段,模板是泛型编程的基础。

🌈 Ⅱ 函数模板

1. 函数模板概念

  • 一个函数模板代表了一个单独的功能,一个函数模板就能够对某一个功能所有类型的数据实现。
  • 函数模板与参数的类型无关,只有在被使用时会进行参数化,根据实参的类型来完成函数的特化类型版本。

2. 函数模板格式

1. 函数模板格式

  • template:用来定义模板的关键字。
  • typename:用来定义模板参数的关键字。
template<typename T1, typename T2, ... , typename Tn>

返回值类型 函数名(参数列表)
{
	函数体
}

2. 函数模板示例

template<typename T>	// T 可以表示任何数据类型

void Swap(T& x, T& y)	// 根据万用类型 T 创建函数模板
{
	T tmp = x;
	x = y;
	y = tmp;
}

在这里插入图片描述

3. 函数模板原理

  • 在上述示例中,Swap 函数压根就不存在。
  • 交换 int 型的和交换 char 型的调用的并不是同一个函数。
  • 函数模板只是一个模板,本身不是函数,而是编译器在知道了你要交换什么类型的数据,然后根据实参类型利用函数模板现场生成了一个交换具体类型的函数。
  • 如果在已经有了现成的具体函数,编译器会调用现成的函数
    • 前提是现成的函数要够好用,如果实参是 double ,现成函数的形参却是 int ,编译器还是会自己根据模板推演出一份 double 类型的函数。
  • 编译器根据 实参类型 + 函数模板 自动生成函数称为函数模板隐式实例化

在这里插入图片描述

4. 函数模板显式实例化

  • 隐式实例化:编译器根据实参和模板自动生成函数。
  • 显式实例化:指定模板参数的类型,并且强制调用模板。
    • 格式:函数名<指定模板参数类型>(实参);
Swap<double>(d1, d2);	// 指定模板参数为 double,并且编译器必须使用模板

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

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

相关文章

逐行拆解Guava限流器RateLimiter

逐行拆解Guava限流器RateLimiter 常见限流算法 计数器法 设置一个时间窗口内允许的最大请求量&#xff0c;如果当前窗口请求数超过这个设定数量&#xff0c;则拒绝该窗口内之后的请求。 关键词&#xff1a;时间窗口&#xff0c;计数器。 举个例子&#xff0c;我们设置1秒钟…

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步&#xff0c;开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”&#xff08;效果如下图所示&#xff09;&#…

基于物联网的实时数据分析(简单介绍)

在当今这个信息化、数字化飞速发展的时代&#xff0c;物联网&#xff08;Internet of Things, IoT&#xff09;和实时数据分析成为了技术革新的两大支柱。对于刚入行的新手来说&#xff0c;理解这两个概念及其相互作用不仅是迈入这一领域的第一步&#xff0c;更是掌握未来技术趋…

Android 粒子喷泉动效

一、前言&#xff1a; 在学习open gl es实现动效的时候&#xff0c;打算回顾了一下用普通的2D坐标系实现粒子效果和 open gl 3d 坐标系的区别&#xff0c;以及难易程度&#xff0c;因此本篇以Canvas 2D坐标系实现了一个简单的demo。 粒子动效原理&#xff1a; 粒子动效本质上…

Springboot 整合 Elasticsearch(二):使用HTTP请求来操作ES

&#x1f4c1;前情提要&#xff1a;Springboot整合Elasticsearch&#xff08;一&#xff09;&#xff1a;Linux下安装 Elasticsearch 8.x 目录 一、使用 elasticsearch-head 插件连接 1、下载压缩包 2、在 chrome 浏览器中添加扩展程序 3、修改IP地址&#xff0c;点击连接 …

Excel+VBA处理高斯光束

文章目录 1 图片导入与裁剪2 获取图片数据3 数据拟合 1 图片导入与裁剪 插入图片没什么好说的&#xff0c;新建Excel&#xff0c;【插入】->【图片】。 由于图像比较大&#xff0c;所以要对数据进行截取&#xff0c;选中图片之后&#xff0c;点击选项卡右端的【图片格式】…

Postgresql 的编译安装与包管理安装, 全发行版 Linux 通用

博客原文 文章目录 实验环境信息编译安装获取安装包环境依赖编译安装安装 contrib 下工具代码 创建用户创建数据目录设置开机自启动启动数据库常用运维操作 apt 安装更新源安装 postgresql开机自启修改配置修改密码 实验环境信息 Ubuntu 20.04Postgre 16.1 编译安装 获取安装…

HiveSQL——不使用union all的情况下进行列转行

参考文章&#xff1a; HiveSql一天一个小技巧&#xff1a;如何不使用union all 进行列转行_不 union all-CSDN博客文章浏览阅读881次&#xff0c;点赞5次&#xff0c;收藏10次。本文给出一种不使用传统UNION ALL方法进行 行转列的方法,其中方法一采用了concat_wsposexplode()方…

[经验] 喉咙沙哑的原因及应对方法是什么 #学习方法#其他#媒体

喉咙沙哑的原因及应对方法是什么 生活中&#xff0c;喉咙不舒服是很常见的情况&#xff0c;尤其是喉咙沙哑&#xff0c;让人感到特别难受&#xff0c;影响睡眠和生活质量。那么喉咙沙哑怎么办呢&#xff1f;接下来我会分享一些简单易行的方法&#xff0c;帮助你缓解这种不适感…

搭建yum仓库服务器

安装 1.安装linux 1.1安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 1.2下载 cd /opt/nginx wget http://nginx.org/download/nginx-1.25.3.tar.gz 1.3解压 tar -xvf nginx-1.25.3.tar.gz 1.4配置 cd nginx-1.25.3 ./configure --pre…

【Larry】英语学习笔记语法篇——从句=连词+简单句

目录 三、从句连词简单句 1、必须有连词 主从结构 疑问词的词性 2、名词性从句 同位语从句 形式主语 形式宾语 that的省略 3、形容词性从句&#xff08;上&#xff09; 关系代词 关系词的作用 介词前置问题 4、形容词性从句&#xff08;中&#xff09; 定语关系…

程序的内存模型

内存分区模型 C程序在执行时&#xff0c;将内存大方向分为4个区域 1.代码区&#xff1a;存放函数体的二进制代码&#xff0c;有操作系统进行管理 2.全局区&#xff1a;存放全局变量和静态变量以及常量 3.栈区&#xff1a;由编译器自动分配及释放&#xff0c;存放函数的参数…

开源微服务平台框架的特点是什么?

借助什么平台的力量&#xff0c;可以让企业实现高效率的流程化办公&#xff1f;低代码技术平台是近些年来较为流行的平台产品&#xff0c;可以帮助很多行业进入流程化办公新时代&#xff0c;做好数据管理工作&#xff0c;从而提升企业市场竞争力。流辰信息专业研发低代码技术平…

InternLM大模型实战-2.浦语大模型趣味demo

文章目录 前言笔记正文3个Demo的简要介绍InternLM模型简介Lagent介绍书生灵笔多模态大模型 Demo动手实践模型的下载更多 前言 本文是对于InternLM全链路开源体系系列课程的学习笔记。视频教程&#xff1a;【轻松玩转书生浦语大模型趣味Demo】 https://www.bilibili.com/video/…

appears to be hung in Auto SQL Tuning task

appears to be hung in Auto SQL Tuning task Oracle 自动定时优化任务执行失败分析 错误现象&#xff1a; Sat Feb 10 03:10:57 2024 Process 0x0x00007FFB81BE44A8 appears to be hung in Auto SQL Tuning task Current time 1707505857, process death time 1707505803 …

【医学大模型 尘肺病】PneumoLLM:少样本大模型诊断尘肺病新方法

PneumoLLM&#xff1a;少样本大模型诊断尘肺病新方法 提出背景PneumoLLM 框架效果 提出背景 论文&#xff1a;https://arxiv.org/pdf/2312.03490.pdf 代码&#xff1a;https://github.com/CodeMonsterPHD/PneumoLLM/tree/main 历史问题及其背景&#xff1a; 数据稀缺性问题&a…

DevOps落地笔记-13|自动化测试:提高测试效率的不二之选

上一课时主要介绍了通过 API 管理平台来管理企业内部的 API。持续集成是能够保证软件处于可工作状态的实践&#xff0c;但实施持续集成有一个必不可少的步骤——测试。只有尽可能全面的测试覆盖&#xff0c;才能降低软件出错的概率。但是&#xff0c;大多数企业里还是基于人工来…

第二十六回 母夜叉孟州道卖人肉 武都头十字坡遇张青-Ubuntu 防火墙ufw配置

武松到县里投案&#xff0c;县官看武松是个汉子&#xff0c;就把诉状改成&#xff1a;武松与嫂一时斗殴杀死&#xff0c;后西门庆前来&#xff0c;两人互殴&#xff0c;打死西门庆。上报东平府。东平府尹也可怜武松&#xff0c;从轻发落&#xff0c;最后判了个&#xff1a;脊杖…

2024 年 12 款最佳录屏软件【录屏必备指南】

在数字时代&#xff0c;共享屏幕就像发送短信一样常见。 无论是工作、创建教程还是流媒体游戏&#xff0c;找到合适的截屏软件可以决定您的在线形象。 我们测试并整理了一系列最佳的截屏和屏幕录制工具&#xff0c;可将您的内容提升到一个新的水平。 从功能丰富的选项到用户…

RM电控--机械入门

SW常用的快捷键&#xff1a; 多种视角观看&#xff1a; 左侧为自攻螺丝&#xff0c;右侧为钻尾螺丝 钻尾螺丝可以依靠自身进行钻孔操作&#xff0c;而自攻螺丝打之前必须先打好小孔。 螺钉; 这些螺钉大家认得全吗&#xff1f;你还知道哪些呢&#xff1f;_哔哩哔哩_bilibili …