函數模板,實際上是建立一個通用函數,其函數類型和形參類型不具體指定,用一個虛擬的類型來代表。這個通用函數就稱爲函數模板。
本質:類型參數化
爲什麼要用函數模板:當存在功能相同,不需要重複修改業務邏輯時,
函數模板的調用
MySwap<int>(a,b) //顯示類型調用
MySwap(a,b) //自動數據類型推到(根據實參對參數類型進行推導)
#include <iostream>
using namespace std;
//相同參數類型
template <typename T>
///交換位置
void MySwap(T &a,T &b)
{
T c = NULL;
c = a;
a = b;
b = c;
}
//不同參數類型
template <typename T,typename T1>
///排序
void MySort(T *array,T1 size)
{
T1 i, j;
T temp = 0;
for (i = 0; i < size;i++)
{
for (j = i+1; j<size;j++)
{
if (array[i] < array[j])
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
//不同參數類型
template <typename T,typename T1>
void MyPrint(T *array,T1 size)
{
for (int i = 0; i < size; i++)
{
cout << array[i] << " ";
}
}
int main()
{
int a = 10;
int b = 20;
MySwap<int>(a, b);// 顯示類型調用
MySwap(a, b);//自動類型數據推導
printf("a:%d,b:%d \n", a, b);
char c = 'c';
char d = 'd';
MySwap<char>(c, d);//顯示類型調用
MySwap(c, d);//自動類型數據推導
printf("c:%c,d:%c \n", c, d);
int array[] = { 5,34,23,76,23,4,5,0,9,12,2,33 };
int size = sizeof(array) / sizeof(*array);
MySort<int,int>(array, size);// 顯示類型調用
MyPrint(array, size);//自動類型數據推導
cout << endl;
char cArray[] = "ashjku3256yiuuh";
int len = strlen(cArray);
MySort(cArray, len);
MyPrint(cArray, len);
system("pause");
return 0;
}