C++模板——(2)函数模板的声明和使用

news2024/9/21 8:02:39

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
勤奋,机会,,乐观是成功的三要素!

一起加油!

目录

🔑说明: 

例:编写一个函数模板,求三个数中的最大值。 

🔑说明:

例:编写一个函数模板,对一维数组进行排序。

🔑说明: 

总结:

共勉: 


        将很多个处理不同数据类型、相同逻辑功能的函数抽象成一个统一的函数,称为函数模板。函数模板实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来表示。这个通用函数就是函数模板。

        函数模板的一般定义格式如下:

template <class T>或<typename T>
返回类型函数名(参数表)

{

                        函数体

}

🔑说明: 

  • (1)template是定义函数模板的关键字,总是放在模板定义和声明的最前面。
  • (2)<classT>或<typenameT>必须用尖括号“<>”括起来,其中,T为类型参数,T实际上是一个虚拟的类型名,可以用来指定函数模板本身的参数类型、返回值类型,以及局部变量,但是此时并未指定。当使用函数模板时,T 就会被替换为某种实际的数据类型(例如,int、char、float 等 。T还可以被符合规范的标识符替换。
  • (3)后面函数的定义方式与之前提到的普通函数的定义方式类似。 

        下面通过具体的例子说明函数模板的定义和使用方法。

例:编写一个函数模板,求三个数中的最大值。 

#include<iostream>
using namespace std;
template<class T>
T Max(T a,T b,T c)
{
	T max=a>b?(a>c?a:c):(b>c?b:c);
	return max;
} 
int main()
{
	int ia=78,ib=64,ic=18;
	cout<<"三个整数最大值为:"<<Max(ia,ib,ic)<<endl;
	float fa=3.14,fb=84.4,fc=15.9;
	cout<<"三个浮点数最大值为:"<<Max(fa,fb,fc)<<endl;
    char ca='A',cb='d',cc='m';
	cout<<"三个字符最大值为:"<<Max(ca,cb,cc)<<endl;
	return 0;
}

🔑说明:

        该程序定义了一个函数模板T Max(T a,T b,T c),模板参数类型是T,在使用函数模板时,T 被替换为某种实际的数据类型。在调用Max(ia,ib,ic)时,T代表int 类型;在调用Max(fa,fb,fc)时,T代表float 类型;在调用Max(ca,cb,cc)时,T代表char 类型,这样函数模板T Max(T a,T b,T c)通过简单的代码就可以实现不同数据类型的大小比较,提高了代码的复用性,对于其他数据类型,如double、long 等类型同样适用。 

例:编写一个函数模板,对一维数组进行排序。

#include<iostream>
#include<cstring>
using namespace std;
template<class T>
void sort(T*a,int n)
{
	int i,j;
	T temp;
	for(i=1;i<n;i++)
	{
		for(j=0;j<n-i;j++)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
}
int main()
{
	int ia[10]={78,99,45,16,75,94,51,61,75,19};
	float fa[6]={23.4,78.5,15.9,67.1,94.5,6.1};
	char str[]="international";
	sort(ia,10);
	cout<<"10个整数排序为:";
	for(int i=0;i<10;i++)
	{
		cout<<ia[i]<<" "; 
	}
	cout<<endl;
	sort(fa,6);
	cout<<"6个小数排序为:";
	for(int i=0;i<6;i++)
	{
		cout<<fa[i]<<" ";
	} 
	cout<<endl;
	sort(str,strlen(str));
	cout<<"字符排序为:";
	for(int i=0;str[i];i++)
	{
		cout<<str[i]<<" ";
	}
	cout<<endl;
	return 0;
}

🔑说明: 

        该程序中定义了一个函数模板 void sort(T*a,int n),模板类型参数是T当需要对整数或浮点数或字符型数组进行排序时,T就被替换为相应的int、float、char 类型。

总结:

  •         将很多个处理不同数据类型、相同逻辑功能的函数抽象成一个统一的函数,称为函数模板。 
  •         template是定义函数模板的关键字,总是放在模板定义和声明的最前面。
  •         <classT>或<typenameT>必须用尖括号“<>”括起来,其中,T为类型参数。
  •         后面函数的定义方式与之前提到的普通函数的定义方式类似。

共勉: 

        以上就是我对C++模板——(2)函数模板的声明和使用的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++模板的理解,请持续关注我哦!!! 

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

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

相关文章

小狗避障Scratch-第14届蓝桥杯Scratch省赛真题第4题

4. 小狗避障&#xff08;60分&#xff09; 评判标准&#xff1a; 5分&#xff1a;满足"具体要求"中的1&#xff09;&#xff1b; 5分&#xff1a;满足"具体要求"中的2&#xff09;&#xff1b; 10分&#xff1a;满足"具体要求"中的3&#xff…

程序员必知!迭代器模式的实战应用与案例分析

迭代器模式提供了遍历聚合对象中各元素的方法&#xff0c;通过它无需了解其底层结构&#xff0c;例如&#xff0c;在电商平台商品列表中统计销售额时&#xff0c;可通过迭代器简化遍历过程&#xff0c;加总每个商品销售额&#xff0c;此模式使代码更简洁、易维护&#xff0c;且…

LeetCode-移动零(283)

题目描述&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 思路&#xff1a; 这里的思路跟以前做过的去重复数字的思路有点像&…

整合事务,名词,概念

mysql实例(instance): MySQL是单进程多线程&#xff0c;也就是说MySQL实例在系 统上表现就是一个服务进程&#xff0c;即进程,就是我们在自己电脑布了一个mysql实例(服务),然后我们在代码中就可以通过配上mysql实例的地址,就能连上自己电脑上的这mysql实例. 数据库database: …

Vue框架底层

一、前端框架的由来 1、服务端渲染 sequenceDiagram 浏览器->>服务器: https://www.bilibili.com/ Note right of 服务器: 组装页面(服务端渲染) 服务器->>-浏览器: 完整页面2、前后端分离 sequenceDiagram 浏览器->>服务器: https://www.bilibili.com/ 服务…

Linux文件系统和日志分析

一、inode表结构 1. inode表 inode号在同一个设备上是唯一的。 inode号是有限资源&#xff0c;它的大小和磁盘大小有关。 访问文件的基本流程 根据文件夹的文件名和inode号的关系找到对应的inode表&#xff0c;再根据inode表&#xff08;属主 属组&#xff09;当中的指针找到磁…

毛概笔记。

一、 毛泽东思想是马中化的第一果&#xff0c;是关于搞革命&#xff0c;搞改造&#xff0c;搞建设的理论。 二、新民主主义革命 新民主主义革命的三大法宝&#xff1a;1.统一战线 2. 武装斗争 3.党的建设 政治纲领 经济纲领 文化纲领 乱世造英雄 三、社会主义改造理论&#xff…

多类指针式仪表自动读数系统的LabVIEW开发应用案例

多类指针式仪表自动读数系统的LabVIEW开发应用案例 工业环境中&#xff0c;多类指针式仪表的自动读数一直是一个具有挑战性的问题。本案例旨在展示如何使用LabVIEW开发一个高度智能化的多类指针式仪表自动读数系统&#xff0c;以应对复杂的工业环境。通过结合图像处理技术和深…

DSP2335的时钟PLL配置

PLL模块框图 xclkin是直接进来的外部时钟&#xff1b; 而下面的是振荡器&#xff08;晶振出来&#xff09;的时钟 PLLSTS 锁相环状态寄存器 PLLCR 锁相环控制寄存器 PLLSTS【oscoff】 决定着外部时钟的输入 PLLSTS【plloff】 锁相器关闭位 0使能PLL 锁相环控制寄存器…

程序猿的时间管理和生产力

文章目录 为什么时间管理很重要&#xff1f;如何管理时间&#xff1f;心理维度生理维度技术尺寸 时间管理技巧每周计划基于目标的规划番茄钟为什么是25分钟&#xff1f;番茄钟为什么有效&#xff1f;艾森豪威尔矩阵这一切都是从开发者的角度来看的 也许我从开始学习或从事软件开…

C++面向对象核心-权限-多态

1、权限 1.1 权限修饰符 三种权限&#xff0c;一共对应九种场景。要做到心中有表&#xff0c;遇到任何一种场景都能直接反映出是否能访问。 类内 派生类中 全局 private √ protected √ √ public √ √ √ #include <iostream> using namespace std;…

第二百五十三回

文章目录 概念介绍使用方法示例代码 概念介绍 进度条是常用的组件之一&#xff0c;它主要用来显示某种动作的完成进度。Flutter提供了多种进度条组件&#xff0c;常用的是水平进度条&#xff1a;LinearProgressIndicator&#xff1b;圆形进度条 :CircularProgressIndicator和R…

4.4 TILING FOR REDUCED MEMORY TRAFFIC

我们在CUDA中使用设备内存方面有一个内在的权衡&#xff1a;全局内存大但速度慢&#xff0c;而共享内存小但速度快。一个常见的策略是将数据划分为称为tile的子集&#xff0c;以便每个tile都适合共享内存。tile一词”借鉴了一个类比&#xff0c;即大墙&#xff08;即全局内存数…

data-factory java 开源根据对象定义自动生成测试对象数据

创作目的 我们平时在写测试用例的时候&#xff0c;免不了要写一大堆 set 方法为对象设置属性。 有时候为了补全测试用例&#xff0c;这件事就会变得非常枯燥。 于是就在想&#xff0c;能不能写一个可以自动生成测试对象的工具呢&#xff1f; 于是就有了这一个没啥用的测试框…

网络调试 UDP1,开发板用动态地址-入门6

https://www.bilibili.com/video/BV1zx411d7eC?p11&vd_source109fb20ee1f39e5212cd7a443a0286c5 1, 开发板连接路由器 1.1&#xff0c;烧录无OS UDP例程 1.2&#xff0c;Mini USB连接电脑 1.3&#xff0c;开发板LAN接口连接路由器 2. Ping开发板与电脑之间通信* 2.1 根据…

人工智能AI网站大全—实现自动聊天、绘画、创作论文、生成视频等

人工智能正在逐步改变大家的生活和工作方式&#xff0c;本文总结当前人工智能实用网站&#xff0c;方便大家更快地把AI应用到工作和生活中&#xff0c;提高效率。主要包括自动聊天、自动创作论文、自动绘画、、自动创作视频等模块。 文章目录 Part1 10w.aiPart2 liblib.AIPart3…

洗地机什么牌子好?目前口碑最好的洗地机

如今&#xff0c;人们的生活中&#xff0c;洗地机已经成为了越来越受欢迎的清洁工具&#xff0c;洗地机能迅速而有效地清理地板、地毯以及其他硬表面&#xff0c;为用户提供更加方便快捷的洗地机体验。那么&#xff0c;洗地机什么牌子好?我们一起来看看目前口碑最好的洗地机有…

人工智能任务2-读懂Transformer模型的十个灵魂拷问问题,深度理解Transformer模型架构

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务2-读懂Transformer模型的十个灵魂拷问问题&#xff0c;深度理解Transformer模型架构。Transformer模型是一种基于自注意力机制的神经网络架构&#xff0c;被广泛用于自然语言处理任务中&#xff0c;如机…

C语言注意点(4)

1、void *a是什么意思 答&#xff1a;泛型指针&#xff0c;但不规定其类型(就是地址确定&#xff0c;但数据长度不确定)在动态分配内存时&#xff0c;malloc的返回值就是该类型&#xff0c;方便用户进行强制转换。 2、VS怎么一键规范格式 for(i0;i<10;i)enter后&#xff0c;…

selenium3自动化测试(这一篇就够了)——自学篇

本人整理收藏了20年多家公司面试知识点整理 &#xff0c;以及学习路线和视频教程免费分享给大家&#xff0c;我认为对面试来说是非常有用的&#xff0c;想要资料的话请点1150305204暗号CSDN。或者点击文末名片进入&#xff0c;免费领取 &#xff08;一&#xff09;安装seleniu…