函数模板
作者:互联网
问题:
在一个double型数组中,查找最大的数
在一个float型数组中,查找最大的数
在一个Object[]数组中,查找最大的元素
算法一样:遍历数组,找出最大值,只是元素的类型不一样。
如果每一种类型都重载一个findmax函数,显得太笨拙。
int findmax(int arr[],int len)
{
int val=arr[0];
for(int i=1;i<len;i++)
{
if(arr[i]>val)
val=arr[i];
}
return val;
}
模板,template:定义一个模子,自动适应各个类型。
语法:
定义一个函数模板
template<typename T>
T findmax(T arr[],int len)
{
T val=arr[0];
}
- 算法相同
- 元素类型不同,用T代替
使用时,用<>来具体指定typename的类型
int main()
{
int arr[4]={1,42,87,100};
int result=findmax <int>(arr,4);
return 0;
}
在使用时函数名为findmax ,表示把int类型带入模板。
在C/C++里,空白是不影响最终编译结果的,以下两个风格结果是一样
第一种:
template<typename T>
T findmax(T arr[],int len)
{
}
第二种:
template<typename T>T findmax(T arr[],int len)
{
}
分一行和分两行结果是一样的
template<>里面可以传给多个参数
使用函数模板的好处:相同的算法就不用重复的写多遍,简化了代码
函数模板用于实现通用的算法generic algrithm。也称泛型算法。
通常,我们更多的是调用人家写好的函数模板,很少自己去写一个模板
注意:
1. 区分“模板参数”与“函数参数”
模板参数
template<typename _T1,typename _T2>
通常是一个类型的名字,如int,double,Object,Student
- 模板的语法检查
模板在代入时才能真正地检查语法是否正确。(操作符重载。。。) - 模板通常定义在头文件里
- 模板参数可以多个
标签:arr,函数,findmax,int,template,模板 来源: https://blog.51cto.com/u_8697137/3044814