创建函数模板1.创建Student(数据成员string name ,int grade)类及所需函数。2.求出集合中的最大值,支持int,double,char,Student等类型的数据。3.排序方法,支持int,double, char,Student (按成绩排序) 等类型的数据。4.中位数指的是一组数,如果按照大小排序排好后最中间的那个数的值, 如果有偶数个元素,那么就是最中间两个数的平均数。求出集合中的中位数,支持int,double,Student集合中成绩的中位数。
时间: 2024-02-12 10:07:50 浏览: 57
好的,我来帮您解答这个问题。首先需要声明一个函数模板,用于求集合中的最大值:
```cpp
template<typename T>
T max_value(const std::vector<T>& v) {
T max = v[0];
for (int i = 1; i < v.size(); i++) {
if (v[i] > max) {
max = v[i];
}
}
return max;
}
```
其中,`typename T` 表示这是一个模板函数,可以支持不同类型的数据,`const std::vector<T>& v` 表示传入一个 `vector` 类型的集合,函数内部会遍历集合,找到最大值并返回。
接下来,我们需要实现一个排序方法,用于支持不同类型的数据:
```cpp
template<typename T>
void sort(std::vector<T>& v) {
std::sort(v.begin(), v.end());
}
```
这里使用了 C++ 标准库中的 `sort` 函数,可以直接对 `vector` 进行排序。
接着,我们需要实现一个求中位数的函数模板:
```cpp
template<typename T>
T median(const std::vector<T>& v) {
std::vector<T> tmp(v.begin(), v.end());
std::sort(tmp.begin(), tmp.end());
int n = tmp.size();
if (n % 2 == 0) {
return (tmp[n/2 - 1] + tmp[n/2]) / 2;
}
else {
return tmp[n/2];
}
}
```
这里也是使用了 C++ 标准库中的 `sort` 函数进行排序,然后根据集合的大小求出中位数。需要注意的是,`Student` 类型的数据需要重载运算符 `>` 和 `<`,以便排序使用。
最后,我们需要创建 `Student` 类及所需函数:
```cpp
class Student {
public:
std::string name;
int grade;
Student(const std::string& n, int g) : name(n), grade(g) {}
bool operator<(const Student& other) const {
return grade < other.grade;
}
bool operator>(const Student& other) const {
return grade > other.grade;
}
};
```
这里定义了一个 `Student` 类,包含了两个数据成员 `name` 和 `grade`,并重载了运算符 `<` 和 `>`,以便排序使用。
综上所述,我们的完整代码如下:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
template<typename T>
T max_value(const std::vector<T>& v) {
T max = v[0];
for (int i = 1; i < v.size(); i++) {
if (v[i] > max) {
max = v[i];
}
}
return max;
}
template<typename T>
void sort(std::vector<T>& v) {
std::sort(v.begin(), v.end());
}
class Student {
public:
std::string name;
int grade;
Student(const std::string& n, int g) : name(n), grade(g) {}
bool operator<(const Student& other) const {
return grade < other.grade;
}
bool operator>(const Student& other) const {
return grade > other.grade;
}
};
template<typename T>
T median(const std::vector<T>& v) {
std::vector<T> tmp(v.begin(), v.end());
std::sort(tmp.begin(), tmp.end());
int n = tmp.size();
if (n % 2 == 0) {
return (tmp[n/2 - 1] + tmp[n/2]) / 2;
}
else {
return tmp[n/2];
}
}
int main() {
std::vector<int> v1 = {3, 5, 1, 7, 2, 9};
std::cout << "max_value(v1) = " << max_value(v1) << std::endl;
sort(v1);
for (int i : v1) {
std::cout << i << " ";
}
std::cout << std::endl;
std::cout << "median(v1) = " << median(v1) << std::endl;
std::vector<double> v2 = {3.2, 5.1, 1.7, 7.6, 2.4, 9.8};
std::cout << "max_value(v2) = " << max_value(v2) << std::endl;
sort(v2);
for (double d : v2) {
std::cout << d << " ";
}
std::cout << std::endl;
std::cout << "median(v2) = " << median(v2) << std::endl;
std::vector<char> v3 = {'c', 'e', 'a', 'g', 'b', 'i'};
std::cout << "max_value(v3) = " << max_value(v3) << std::endl;
sort(v3);
for (char c : v3) {
std::cout << c << " ";
}
std::cout << std::endl;
std::cout << "median(v3) = " << median(v3) << std::endl;
std::vector<Student> v4 = {{"Tom", 90}, {"Jerry", 80}, {"Lucy", 95}};
std::cout << "max_value(v4) = " << max_value(v4).grade << std::endl;
sort(v4);
for (Student s : v4) {
std::cout << s.name << " " << s.grade << std::endl;
}
std::cout << "median(v4) = " << median(v4).grade << std::endl;
return 0;
}
```
阅读全文