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

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

一起加油!

目录

🔑说明:

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

🔑说明:

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

🔑说明:

总结:

共勉:


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

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

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

{

函数体

}

**🔑**说明:

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

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

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

cpp 复制代码
#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 等类型同样适用。

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

cpp 复制代码
#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++模板的理解,请持续关注我哦!!!

相关推荐
Starmoon_dhw6 分钟前
题解:P16108 「o.OI R-1」基础博弈练习题
c++·算法·图论
小牛itbull9 分钟前
【译】为什么我使用 React 重构了 WordPress?
前端·react.js·重构
用户0595401744610 分钟前
AI Agent 记忆存储踩坑实录:这个问题让我排查了 3 天,最终用 pytest + Docker 实现秒级回归
前端·css
用户2986985301412 分钟前
在 React 中拆分 Excel 文件:从工作表到行列的实践
javascript·react.js·excel
今日无bug14 分钟前
Emmet 语法速成指南
前端·css·html
Hello.Reader17 分钟前
Tailwind CSS v4.3 从入门到实战Vite 安装、响应式布局、暗黑模式与主题配置
前端·css
想要成为糕糕手20 分钟前
238. 除了自身以外数组的乘积 — 面试向深度解析
javascript·算法·面试
kisshyshy22 分钟前
前端存储、表单异步提交与 this 指向完全指南
前端·javascript·html
cidy_9823 分钟前
Skills 技能库- JulyCode
前端
Kel26 分钟前
管道、IPC、Socket:你以为的三种技术,其实是同一件事
javascript·设计模式·node.js