上回说了函数模板的基本用法和注意事项,我们来准备一个小程序,做一个函数模板的案例。
案例描述:
- 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序
- 排序规则从小到大,排序算法为选择排序
- 分别利用char数组和int数组进行测试
直接上代码,一些代码的解释以注释的形式放在代码中。
#include<iostream>
#include<string>
using namespace std;
//利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序
//排序规则从大到小,排序算法为选择排序
//分别利用char数组和int数组进行测试
//实现交换的模板
template <typename T>
void myswap(T & a,T & b)
{
T temp = a;
a = b;
b = temp;
}
//提供一个打印数组的模板
template<typename T>
void printArr(T arr[] , int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
//提供一个排序的模板。
template<typename T>
void mysort(T arr[], int len)//传入的是数组的值和数组的长度。
{
for (int i = 0; i < len; i++)
{
int min = i;
for (int j = i + 1; j < len; j++)
{
//认定的最大值,比遍历出的数值要大,说明j下标才是真正的最大值。
if (arr[min] > arr[j])
{
min = j;
}
}
if (min != i)
{
//交换max和 i
myswap(arr[min], arr[i]);
}
}
}
void test01()
{
char charArr[] = "asdfghj";
//排序数组
mysort(charArr, sizeof(charArr) / sizeof(char));
printArr(charArr, sizeof(charArr) / sizeof(char));
}
void test02()
{
int intArr[] = { 1,4,7,2,5,8 };
mysort(intArr, sizeof(intArr) / sizeof(int));
printArr(intArr, sizeof(intArr) / sizeof(int));
}
int main()
{
test01();
test02();
system("pause");
return 0;
}
最后的结果如下所示:
a d f g h j s
1 2 4 5 7 8
请按任意键继续. . .