创建函数模板 1.创建 Student (数据成员 string name , int grade )类及所需函数。 2.求出集合中的最大值,支持 int , double , char , Student 等类型的数据。 3.排序方法,支持 int , double , char , Student (按成绩排序)等类型的数据。 4.中位数指的是一组数,如果按照大小排序排好后最中间的那个数的值, 如果有偶数个元素,那么就是最中间两个数的平均数。 求出集合中的中位数,支持 int , double , Student 集合中成绩的中位数。
时间: 2024-01-22 15:18:57 浏览: 30
以下是创建的函数模板代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Student {
public:
string name;
int grade;
Student(string n, int g) : name(n), grade(g) {}
};
template<typename T>
T find_max(vector<T> v) {
T max_val = v[0];
for (int i = 1; i < v.size(); i++) {
if (v[i] > max_val) {
max_val = v[i];
}
}
return max_val;
}
template<typename T>
void sort_vector(vector<T>& v) {
sort(v.begin(), v.end());
}
bool compare_student_by_grade(Student& s1, Student& s2) {
return s1.grade < s2.grade;
}
void sort_students_by_grade(vector<Student>& students) {
sort(students.begin(), students.end(), compare_student_by_grade);
}
template<typename T>
double find_median(vector<T>& v) {
int size = v.size();
if (size % 2 == 0) {
return (v[size / 2 - 1] + v[size / 2]) / 2.0;
} else {
return v[size / 2];
}
}
int main() {
vector<int> v1 = {1, 3, -2, 5, 9};
cout << "Max value in v1: " << find_max(v1) << endl;
sort_vector(v1);
cout << "Sorted v1: ";
for (int x : v1) {
cout << x << " ";
}
cout << endl;
vector<double> v2 = {3.14, 1.0, -2.5, 5.6, 9.8};
cout << "Max value in v2: " << find_max(v2) << endl;
sort_vector(v2);
cout << "Sorted v2: ";
for (double x : v2) {
cout << x << " ";
}
cout << endl;
vector<char> v3 = {'a', 'c', 'b', 'e', 'd'};
cout << "Max value in v3: " << find_max(v3) << endl;
sort_vector(v3);
cout << "Sorted v3: ";
for (char x : v3) {
cout << x << " ";
}
cout << endl;
vector<Student> students = { Student("Alice", 85), Student("Bob", 72), Student("Charlie", 93) };
cout << "Max grade in students: " << find_max(students).grade << endl;
sort_students_by_grade(students);
cout << "Sorted students by grade:" << endl;
for (Student s : students) {
cout << s.name << ": " << s.grade << endl;
}
vector<double> v4 = {3.14, 1.0, -2.5, 5.6, 9.8, 4.2};
cout << "Median of v4: " << find_median(v4) << endl;
vector<int> v5 = {1, 3, -2, 5, 9, 7};
cout << "Median of v5: " << find_median(v5) << endl;
vector<Student> students2 = { Student("Alice", 85), Student("Bob", 72), Student("Charlie", 93) };
cout << "Median grade of students2: " << find_median(students2).grade << endl;
return 0;
}
```
这个程序定义了一个 `Student` 类,以及三个函数模板。`find_max` 函数用于找到给定集合中的最大值。`sort_vector` 函数用于对集合进行排序。`find_median` 函数用于找到给定集合的中位数。
在 `main` 函数中,我们首先测试了这些函数模板对 int、double、char 和 Student 类型的集合的正确性。然后,我们测试了 `find_median` 函数对 int、double 和 Student 类型的集合的正确性。