1、函数模板和普通函数区别
//普通函数可以进行自动类型转换,
//函数模板必须精确类型匹配;
//函数模板可以被重载;c++优先考虑普通函数;
#include<iostream>
using namespace std;
//函数模板-->产生模板函数-->调用函数
template<class T>
T MyAdd(T a, T b)
{
cout << "调用函数模板" << endl;
return a + b;
}
void MyAdd(int a, int b)
{
cout << "调用函数" << endl;
}
int main()
{
int a = 10, b = 20;
MyAdd(a, b);
double da = 1.12, db = 1.14;
MyAdd(da, db);
MyAdd(2, 'A');
return 0;
}
运行结果:
2、函数模板机制
#include<iostream>
using namespace std;
//函数模板-->产生模板函数-->调用函数
template<class T>
T MyAdd(T a, T b)
{
return a + b;
}
int main()
{
int a = 10, b = 20;
MyAdd(a, b); //产生MyAdd(int a,int b)函数并调用
double da = 1.12, db = 1.14;
MyAdd(da,db); //产生MyAdd(double a,double b)函数并调用
MyAdd(a, a); //直接调用第一次产生的MyAdd(int a,int b)函数
return 0;
}
3、函数模板应用-int类型和char类型排序
#include<iostream>
using namespace std;
//对char类型和Int类型数组进行排序
//void PrintArray(int *arr, int len)
//{
// for (int i = 0; i < len; i++)
// {
// cout << arr[i] << " ";
// }
// cout << endl;
//}
template<class T>
void PrintArray(T *arr, int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
void MySwap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
//冒泡排序
void MySort(int* arr, int len)
{
for (int i = 0; i < len; i++)
{
for (int j = 0 ;j < len-i-1; j++)
{
if (arr[j] < arr[j+1])
MySwap(arr[j], arr[j+1]);
}
}
}
//选择排序
//void MySort1(int* arr, int len)
//{
// for (int i = 0; i < len; i++)
// {
// for (int j = i+1; j < len; j++)
// {
// if (arr[i] < arr[j])
// {
// int temp = arr[i];
// arr[i] = arr[j];
// arr[j] = temp;
// }
// }
// }
//}
template<class T>
void MySort1(T* arr, int len)
{
for (int i = 0; i < len; i++)
{
for (int j = i + 1; j < len; j++)
{
if (arr[i] < arr[j])
{
T temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main(void)
{
//数组
int arr[] = { 2,6,1,8,9,2 };
//数组长度
int len = sizeof(arr) / sizeof(int);
cout << "排序前:";
PrintArray(arr, len);
MySort1(arr, len);
cout << "排序后:";
PrintArray(arr, len);
char chArr[] = { 'a','c','f','b','e' };
int lench = sizeof(chArr) / sizeof(char);
cout << "排序前:";
PrintArray(chArr, lench);
MySort1(chArr, lench);
cout << "排序后:";
PrintArray(chArr, lench);
return 0;
}