【C++】用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型,单精度型,双精度型,分别用函数重载、函数模板实现
时间: 2024-10-16 15:04:42 浏览: 37
在C++中,你可以使用以下两种方法来实现这个功能:
1. **函数重载(Function Overloading)**:
函数重载允许你在同一作用域内定义多个同名函数,只要它们的参数列表(包括参数类型和顺序)不同即可。对于整型、单精度浮点型和双精度浮点型的排序,你可以编写三个独立的函数,每个接收对应的数据类型。
```cpp
#include <algorithm>
#include <vector>
// 对整型数组排序
void sortInts(std::vector<int>& nums) {
std::sort(nums.begin(), nums.end());
}
// 对单精度浮点型数组排序
void sortFloats(std::vector<float>& floats) {
std::sort(floats.begin(), floats.end());
}
// 对双精度浮点型数组排序
void sortDoubles(std::vector<double>& doubles) {
std::sort(doubles.begin(), doubles.end());
}
```
当你需要对不同类型的数据进行排序时,只需传入相应的容器即可。
2. **函数模板(Function Templates)**:
函数模板提供了一种更为通用的方式来处理不同类型的参数。通过模板参数`T`,我们可以创建一个模板函数,该函数可以接受任意数据类型,并在编译时根据实参的具体类型生成相应版本的函数。
```cpp
template <typename T>
void sortNumbers(T arr[], int size) {
std::sort(arr, arr + size);
}
// 使用模板函数时,编译器会生成具体的实例,如:
int intArray[] = {5, 2, 8};
float floatArray[] = {1.2, 4.5, 3.6};
double doubleArray[] = {9.0, 1.0, 7.0};
sortNumbers(intArray, sizeof(intArray) / sizeof(int));
sortNumbers(floatArray, sizeof(floatArray) / sizeof(float));
sortNumbers(doubleArray, sizeof(doubleArray) / sizeof(double));
```
函数模板的优势在于它能够一次编写,多次使用,适应更多类型的参数。
阅读全文