C++函数模板 & 使用模板函数对int类型数组和char类型数组排序和打印案例(涉及知识点:模板的定义,模板的调用方法,int和char数组的定义,数组长度的计算等)

C++模板包括:函数模板,类模板

一.定义

函数的模板是一个通用函数,我们可以先不指定返回值类型和形参类型。

C++函数模板 & 使用模板函数对int类型数组和char类型数组排序和打印案例(涉及知识点:模板的定义,模板的调用方法,int和char数组的定义,数组长度的计算等)_第1张图片

把模板的通用类型T用到函数的返回值和行参类型

T func(T a)
相当于把返回值和形参类型设置成了变量T。

二.定义函数模板的语法

C++函数模板 & 使用模板函数对int类型数组和char类型数组排序和打印案例(涉及知识点:模板的定义,模板的调用方法,int和char数组的定义,数组长度的计算等)_第2张图片
如:

template<typename T>  //创建模板
void mySwap(T &a,T &b) // 创建模板之后面要写函数的声明或者定义.
{
    T temp = a;
    a = b;
    b = temp;
}

三.函数模板的定义和调用案例 (交换整型和double型的两个数案例)

3.1正常函数实现整形和double型交换

//实现两个整型交换的函数
void swapInt(int &a,int &b)
{
    int temp = a;
    a = b;
    b = temp;
}

void swapDouble(double &a,double &b)
{
    double temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    swapInt(a,b);

    double c = 1.1;
    double d = 1.2;
    swapDouble(c,d);
    
    return 0;
}

3.2模板函数实现整形和double型交换

// 函数模板
template<typename T> // 声明一个模板,并设置模板中的T为通用类型
void mySwap(T &a,T &b)
{
    T temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    //1.调用方法1: 自动类型推导
    mySwap(a,b);
    //2.调用方法2: 显示指定模板类型,此处指定模板的通用类型T的类型为int
    mySwap<int>(a,b);


    double c = 1.1;
    double d = 1.2;
    //1.调用方法1: 自动类型推导
    mySwap(c,d);
    //2.调用方法2: 显示指定模板类型,此处指定模板的通用类型T的类型为int
    mySwap<double>(c,d);
    
    return 0;
}

四.模板的注意事项

1.自动类型推导,必须推导出一致的数据类型T才可以使用.
C++函数模板 & 使用模板函数对int类型数组和char类型数组排序和打印案例(涉及知识点:模板的定义,模板的调用方法,int和char数组的定义,数组长度的计算等)_第3张图片

2.模板必须确定出T的数据类型,才可以使用.
C++函数模板 & 使用模板函数对int类型数组和char类型数组排序和打印案例(涉及知识点:模板的定义,模板的调用方法,int和char数组的定义,数组长度的计算等)_第4张图片
由于没有指定func()的数据类型,所以后面调用的时候编译错误。
改成如下代码才可以:
C++函数模板 & 使用模板函数对int类型数组和char类型数组排序和打印案例(涉及知识点:模板的定义,模板的调用方法,int和char数组的定义,数组长度的计算等)_第5张图片

五.(案例)使用模板函数对int类型数组和char类型数组排序和打印

#include

using namespace std;

//交换元素
template<typename T>
void mySwap(T &a, T &b)
{
    T temp = a;
    a = b;
    b = temp;
}

//排序
template<typename T>
void mySort(T arr[], int len)
{
    for(int i=0;i<len;i++)
    {
        int max = i; 
        
        for(int j=i+1;j<len;j++)
        {
            if(arr[max]<arr[j])
            {
                max = j; //更新最大值下标
            }
        }

        if(max!=i)
        {
            //交换max和i下标指向的值
            mySwap(arr[max],arr[i]);
        }
    } 
}


//打印数组元素
template<typename T>
void printElement(T &a,int len)
{
    for (int i=0;i<len;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
}
//测试char类型数组
void testChar()
{
    char charArr[] = "badcfe";
    int num = sizeof(charArr) / sizeof(char);
    mySort(charArr,num);
    printElement(charArr,num);
}

//测试int类型数组
void testInt()
{
    int arr[] = {3,2,1};
    int num = sizeof(arr) / sizeof(int);
    mySort(arr,num);
    printElement(arr,num);
}

int main()
{
    testChar();
    testInt();
    return 0;
}

你可能感兴趣的:(C++笔记,c++,开发语言)