问题 C: 函数模板之排序2 [命题人 : admin] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 补充程序,使得输出符合规定的要求。 定义学生类Student(包含成员变量:姓名name、成绩score),以及相关的函数。 排序依旧只使用一个函数模板。 #include<iostream> #include<string> #include<iomanip> using namespace std; // 在这里补充你的代码 template<typename T> void Input(T a[], int n) { for (int i = 0; i < n; i++) cin >> a[i]; } template<typename T> void Show(T a[], int n) { for (int i = 0; i < n; i++) cout << a[i] << ((i < n - 1) ? " " : "\n"); } int main() { const int N = 6; { long a[N]; Input(a, N); Show(a, N); Sort(a, N); Show(a, N); } cout << "-" << endl; { Student a[N]; Input(a, N); Show(a, N); Sort(a, N); Show(a, N); } return 0; }
时间: 2024-01-20 11:02:52 浏览: 80
根据题目描述,需要定义一个学生类 `Student`,包含成员变量 `name` 和 `score`,同时需要完成函数模板 `Sort`。
下面是完整的代码实现,其中包含了 `Student` 类和 `Sort` 函数模板的定义:
```cpp
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class Student {
public:
string name;
int score;
bool operator < (const Student& other) const {
return score < other.score;
}
friend istream& operator >> (istream& is, Student& s) {
is >> s.name >> s.score;
return is;
}
friend ostream& operator << (ostream& os, const Student& s) {
os << s.name << " " << s.score;
return os;
}
};
template<typename T>
void Input(T a[], int n) {
for (int i = 0; i < n; i++)
cin >> a[i];
}
template<typename T>
void Sort(T a[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (a[j] < a[i]) {
T temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
}
template<typename T>
void Show(T a[], int n) {
for (int i = 0; i < n; i++)
cout << a[i] << ((i < n - 1) ? " " : "\n");
}
int main() {
const int N = 6;
{
long a[N];
Input(a, N);
Show(a, N);
Sort(a, N);
Show(a, N);
}
cout << "-" << endl;
{
Student a[N];
Input(a, N);
Show(a, N);
Sort(a, N);
Show(a, N);
}
return 0;
}
```
在这个实现中,`Student` 类包含了 `name` 和 `score` 两个成员变量,同时还重载了 `<` 运算符,以便在 `Sort` 函数中进行排序。`Sort` 函数模板使用冒泡排序来对数组进行排序。`Input` 和 `Show` 函数与原来的实现相同,不做过多解释。
阅读全文