【C++之重载函数】数据排序
上一篇我们用重载函数实现了对n个数据从小到大的排序。
这次我们要用到函数模板。
题目要求
对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型,用函数模板。
——谭浩强的《C++面向对象程序设计》第1章习题第14小题
函数模板
重载函数可以实现一个函数名多用,但在程序中仍要分别定义每一个函数,较为繁琐,而函数模板可以解决这个问题。
- 函数模板就是建立一个通用函数,不具体指定函数类型和形参类型,只用一个虚拟类型来代表。
- 凡是函数体相同的函数都可以用这个模板来代替,不用重复定义多个函数,只需要用模板定义一次。
- 通用函数模板的定义格式:
template <typename T>
或者
template <class T>
- 函数模板虽然比函数重载方便,但也有局限性。函数模板只适用于函数的参数个数相同而类型不同,且函数体相同的情况。
程序
/*
************************************************************************
@file: main.cpp
@date: 20201024
@brief: 对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型,用函数模板实现
@blog: https://blog.csdn.net/weixin_43470383/article/details/109268212
************************************************************************
*/
#include <iostream>
using namespace std;
#define n 3
template <typename T>
void sort(T a[])
{
int i, j, k;
T min;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if (a[j] < a[k])
k = j;
}
if (k != i)
{
min = a[k];
a[k] = a[i];
a[i] = min;
}
}
}
int main()
{
// 1.整型、单精度型、双精度型数组定义
int num1[n];
float num2[n];
double num3[n];
// 2.输入数组元素
for (int i = 0; i < n; i++)
{
cin >> num1[i];
}
for (int i = 0; i < n; i++)
{
cin >> num2[i];
}
for (int i = 0; i < n; i++)
{
cin >> num3[i];
}
// 3.调用排序函数,用选择法对数据进行排序
sort(num1);
sort(num2);
sort(num3);
// 4.输出数组元素
for (int i = 0; i < n; i++)
{
cout << num1[i] << " ";
}
cout << endl;
for (int i = 0; i < n; i++)
{
cout << num2[i] << " ";
}
cout << endl;
for (int i = 0; i < n; i++)
{
cout << num3[i] << " ";
}
cout << endl;
system("PAUSE");
return 0;
}
运行结果
输入:
3 2 1
12.3 23.1 32.1
46.54 65.46 34.56
输出:
1 2 3
12.3 23.1 32.1
34.56 46.54 65.46
程序实现了数据从小到大排序。