其他分享
首页 > 其他分享> > 函数模板

函数模板

作者:互联网

问题:

在一个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];
}
  1. 算法相同
  2. 元素类型不同,用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

  1. 模板的语法检查
    模板在代入时才能真正地检查语法是否正确。(操作符重载。。。)
  2. 模板通常定义在头文件里
  3. 模板参数可以多个

标签:arr,函数,findmax,int,template,模板
来源: https://blog.51cto.com/u_8697137/3044814