创建函数模板创建 Student (数据成员 string name , int grade )类及所需函数排序方法,支持 int , double , char , Student (按成绩排序)等类型的数据。4.中位数指的是一组数,如果按照大小排序排好后最中间的那个数的值,如果有偶数个元素,那么就是最中间两个数的平均数。求出集合中的中位数,支持 int , double , Student 集合中成绩的中位数。
时间: 2024-01-22 14:19:09 浏览: 88
面向对象程序设计201604-定义新类型:类1
以下是创建函数模板的代码,包括 Student 类及所需函数排序方法:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 定义 Student 类
class Student {
public:
string name;
int grade;
Student(string n, int g) : name(n), grade(g) {}
bool operator<(const Student& other) const {
return grade < other.grade;
}
};
// 定义函数模板
template <typename T>
T median(vector<T> v) {
int n = v.size();
sort(v.begin(), v.end());
if (n % 2 == 0) {
return (v[n/2 - 1] + v[n/2]) / 2;
} else {
return v[n/2];
}
}
int main() {
vector<int> v1 = {1, 5, 3, 2, 4};
vector<double> v2 = {1.2, 3.5, 2.8, 4.1, 5.7};
vector<Student> v3 = {Student("Alice", 80), Student("Bob", 90), Student("Charlie", 70), Student("David", 85)};
cout << "Median of v1: " << median(v1) << endl;
cout << "Median of v2: " << median(v2) << endl;
cout << "Median of v3: " << median(v3).grade << endl;
return 0;
}
```
其中,定义的 `median` 函数是一个函数模板,可以接受任意类型的向量作为参数,并返回该向量的中位数。在函数中,首先对向量进行排序,然后根据向量大小的奇偶性计算中位数。对于 `Student` 类型的向量,需要重载 `<` 运算符以实现按成绩排序。
在 `main` 函数中,分别定义了三个不同类型的向量,并调用 `median` 函数求解它们的中位数。输出结果如下:
```
Median of v1: 3
Median of v2: 3.5
Median of v3: 82.5
```
可以看到,函数模板能够正确处理不同类型的数据,并得出正确的中位数结果。
阅读全文