您的位置:首页 > 其它

函数模板

2016-07-03 16:36 477 查看
问题:

在一个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

模板的语法检查

模板在代入时才能真正地检查语法是否正确。(操作符重载。。。)

模板通常定义在头文件里

模板参数可以多个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数