创建函数模板 1.创建 Student (数据成员 string name , int grade )类及所需函数。 2.求出集合中的最大值,支持 int , double , char , Student 等类型的数据。 3.排序方法,支持 int , double , char , Student (按成绩排序)等类型的数据。 4.中位数指的是一组数,如果按照大小排序排好后最中间的那个数的值, 如果有偶数个元素,那么就是最中间两个数的平均数。 求出集合中的中位数,支持 int , double , Student 集合中成绩的中位数。
时间: 2024-01-22 21:19:49 浏览: 72
下面是一个支持以上要求的函数模板:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template<typename T>
T findMax(const vector<T>& v) {
T maxVal = v[0];
for (size_t i = 1; i < v.size(); ++i) {
if (v[i] > maxVal) {
maxVal = v[i];
}
}
return maxVal;
}
template<typename T>
void sortByGrade(vector<T>& v) {
sort(v.begin(), v.end(), [](const T& a, const T& b) {
return a.grade > b.grade;
});
}
template<typename T>
double findMedian(const vector<T>& v) {
vector<T> sortedV = v;
sort(sortedV.begin(), sortedV.end());
size_t n = sortedV.size();
if (n % 2 == 0) {
return (sortedV[n / 2 - 1] + sortedV[n / 2]) / 2.0;
} else {
return sortedV[n / 2];
}
}
class Student {
public:
string name;
int grade;
Student(const string& _name, int _grade) : name(_name), grade(_grade) {}
bool operator>(const Student& other) const {
return grade > other.grade;
}
};
int main() {
vector<int> vi = {1, 3, 5, 2, 4};
cout << "Max value of vi: " << findMax(vi) << endl;
vector<double> vd = {1.2, 3.4, 2.1, 4.5};
cout << "Max value of vd: " << findMax(vd) << endl;
vector<char> vc = {'a', 'c', 'b'};
cout << "Max value of vc: " << findMax(vc) << endl;
vector<Student> vs = {{"Alice", 80}, {"Bob", 90}, {"Charlie", 70}};
cout << "Max grade of students: " << findMax(vs).grade << endl;
sortByGrade(vs);
for (const auto& s : vs) {
cout << s.name << " " << s.grade << endl;
}
vector<double> v1 = {1.0, 2.0, 3.0, 4.0, 5.0};
cout << "Median of v1: " << findMedian(v1) << endl;
vector<double> v2 = {1.0, 2.0, 3.0, 4.0};
cout << "Median of v2: " << findMedian(v2) << endl;
vector<Student> v3 = {{"Alice", 80}, {"Bob", 90}, {"Charlie", 70}};
cout << "Median grade of students: " << findMedian(v3) << endl;
return 0;
}
```
以上代码定义了三个函数模板:`findMax`、`sortByGrade` 和 `findMedian`,分别用于求最大值、排序和中位数。其中 `findMax` 和 `sortByGrade` 都可以使用 `std::sort` 进行实现,而 `findMedian` 需要对集合进行排序后才能计算出中位数。
在 `Student` 类中,我们重载了 `>` 运算符,以便可以在排序时按照成绩进行排序。在 `main` 函数中,我们分别测试了各个函数模板的使用,包括对 `int`、`double`、`char` 和 `Student` 类型的数据进行求值和排序,以及对 `int`、`double` 和 `Student` 类型的数据求中位数。
阅读全文