编写一个能对任意类型(整型、字符型、浮点型)数据进行排序(由小到大)的通用函数,并用main()测试该函数
时间: 2024-12-18 07:38:42 浏览: 16
要创建一个能够对任意类型的数据进行排序的通用函数,我们可以使用模板元编程和C++的`std::less`或自定义比较运算符。这里我们假设所有的数据都可以进行比较(例如,整数、字符和浮点数)。我们将使用`std::sort`函数配合一个可变模板参数的方法。
首先,我们需要一个通用的比较函数模板,它接受两个任意类型的参数并返回一个布尔值,表示第一个参数是否小于第二个:
```cpp
template <typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
bool compare(const T& a, const T& b) {
return a < b;
}
```
然后,我们可以创建一个泛型排序函数,接收一个容器和上述的比较函数作为参数:
```cpp
template <typename Container, typename Compare = decltype(compare)>
void sortGeneric(Container& container, Compare compare = compare) {
std::sort(container.begin(), container.end(), compare);
}
```
现在我们可以创建`main()`函数来测试这个排序函数:
```cpp
int main() {
// 测试整型数组
int arrInt[] = {5, 2, 9, 1, 7};
std::vector<int> vecInt(arrInt, arrInt + sizeof(arrInt) / sizeof(int));
sortGeneric(vecInt); // 排序后: 1, 2, 5, 7, 9
// 测试字符型数组
char arrChar[] = {'z', 'a', 'd', 'b'};
std::vector<char> vecChar(arrChar, arrChar + sizeof(arrChar) / sizeof(char));
sortGeneric(vecChar); // 排序后: 'a', 'b', 'd', 'z'
// 测试浮点型数组
float arrFloat[] = {3.14, 0.5, 1.618, 2.718};
std::vector<float> vecFloat(arrFloat, arrFloat + sizeof(arrFloat) / sizeof(float));
sortGeneric(vecFloat); // 排序后: 0.5, 1.618, 2.718, 3.14
return 0;
}
```
阅读全文