请重新编写上述代码,在满足原题的基础上同时满足下列要求:Main函数内实现大致如下(以int型为例): main(){ int num;//每种数据类型测试数据的个数 cin>>num; Array<int> array_int(num);//初始化数组 cin>>array_int;//调用重载输入运算符输入数据 array_int.sort();//按要求对数组内数据排序 cout<<array_int<<endl;//调用重载输出运算符输出数据 } 要求重载输入和输出运算符,实现对数组内数据的输入和输出,并设计成员函数sort(),当数组内数据是int,double型时,按照从小到大的顺序对数组数据进行排序并输出结果;当数组内数据是char型时,按照ASCII码从小到大的顺序排序并输出结果;当数组内数据为Student类型时,按照成绩(没有重复值)从小到大的顺序,输出排序后的学生学号。
时间: 2024-03-12 19:49:44 浏览: 68
cpp代码-大作业第五题: 定义一个date类如下: class Date { public: void SetDate(int y,int m,int d); void IsLeapYear(); private: int year; int month; int day; }; 要求: (1)编写SetDate(int y,int m,int d)函数,实现对象中数据成员的设置; (2)编写IsLeapYear()判断该年是否是闰年。
以下是满足要求的代码:
```cpp
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
class Student{
public:
int id;
double grade;
bool operator<(const Student& s) const{
return grade<s.grade;
}
};
template<typename T>
class Array{
private:
vector<T> data;
public:
Array(int n){
data.resize(n);
}
void sort(){
std::sort(data.begin(), data.end());
}
friend istream& operator>>(istream& in, Array& a){
for(int i=0;i<a.data.size();i++){
in>>a.data[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const Array& a){
for(int i=0;i<a.data.size();i++){
out<<a.data[i]<<" ";
}
return out;
}
};
template<>
class Array<char>{
private:
vector<char> data;
public:
Array(int n){
data.resize(n);
}
void sort(){
std::sort(data.begin(), data.end());
}
friend istream& operator>>(istream& in, Array& a){
for(int i=0;i<a.data.size();i++){
in>>a.data[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const Array& a){
for(int i=0;i<a.data.size();i++){
out<<a.data[i]<<" ";
}
return out;
}
};
template<>
class Array<Student>{
private:
vector<Student> data;
public:
Array(int n){
data.resize(n);
}
void sort(){
std::sort(data.begin(), data.end());
}
friend istream& operator>>(istream& in, Array& a){
for(int i=0;i<a.data.size();i++){
in>>a.data[i].id>>a.data[i].grade;
}
return in;
}
friend ostream& operator<<(ostream& out, const Array& a){
vector<int> id_list;
for(int i=0;i<a.data.size();i++){
id_list.push_back(a.data[i].id);
}
sort(id_list.begin(), id_list.end());
for(int i=0;i<id_list.size();i++){
for(int j=0;j<a.data.size();j++){
if(a.data[j].id==id_list[i]){
out<<a.data[j].id<<" "<<a.data[j].grade<<" ";
break;
}
}
}
return out;
}
};
int main(){
int num;
cin>>num;
Array<int> array_int(num);
cin>>array_int;
array_int.sort();
cout<<array_int<<endl;
Array<char> array_char(num);
cin>>array_char;
array_char.sort();
cout<<array_char<<endl;
Array<Student> array_student(num);
cin>>array_student;
array_student.sort();
cout<<array_student<<endl;
return 0;
}
```
在这个程序中,我们使用了模板类Array,它可以接受不同类型的数据并实现输入、输出和排序功能。对于不同类型的数据,我们需要特化Array模板类。对于int、double和char类型的数据,我们可以直接使用STL中的sort函数进行排序;对于Student类型的数据,我们需要重载小于运算符,按照成绩从小到大排序,并输出排序后的学生学号。最后,在main函数中,我们按照题目要求输入数据,排序并输出结果。
阅读全文