题目要求
对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
程序实现了数据从小到大排序。