#include<iostream> #include<cstring> using namespace std; class Student { private:int id; char name[40]; int score; public: Student() { id=0; strcpy(name,""); score=0; } Student(int i,char *na,int sc) { id=i; strcpy(name,na); score=sc; } Student(const Student& other) { id=other.id; strcpy(name,other.name); score=other.score; } ~Student(){} Student& operator = (const Student& stu) { strcpy(name,stu.name); return *this; } ostream & operator<<(ostream & out,const Student& stu) { out<<"name="<<name<<",score="<<score; return out; } bool operator>(const Student & stu) { return score<stu.score; } }; int main() { #ifdef _CRT_SECURE_NO_WARNINGS freopen("./in.txt", "r", stdin); freopen("./out.txt", "w", stdout); #endif int i,j,n; Student t; cin>>n; Student *stu=new Student[n]; for(i=0;i<n;i++) cin>>stu[i]; for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) if(stu[j]>stu[j+1]) { t=stu[j]; stu[j]=stu[j+1]; stu[j+1]=t; } for(i=0;i<n;i++) cout<<i+1<<":"<<stu[i]<<endl; delete[]stu; return 0; },优化该段代码
时间: 2024-04-27 15:22:31 浏览: 77
以下是我对该段代码的优化建议:
1. 使用 vector 替代动态分配的数组
使用 vector 可以方便地管理动态分配的数组,避免手动管理内存,代码更加简洁易懂。同时,vector 还提供了许多方便的方法,例如 push_back()、size() 等。
2. 重载输入运算符
重载输入运算符可以使得输入更加方便,代码更加简洁。例如,可以将输入语句改为 cin >> stu[i]。
3. 重载输出运算符
重载输出运算符可以使得输出更加方便,代码更加简洁。需要注意的是,重载输出运算符应该是一个全局函数,而不是类的成员函数。
4. 重载小于号运算符
重载小于号运算符可以使得排序更加方便,代码更加简洁。需要注意的是,重载小于号运算符应该是一个类的成员函数。
5. 使用算法库
使用算法库可以避免手动实现排序算法,代码更加简洁。例如,可以使用 std::sort() 函数实现排序。
综上所述,优化后的代码如下:
相关问题
设计学生类Student,成员数据包括学号(int Id)、姓名(char name[9])成绩(int score)。根据给定的main函数设计必要的成员函数。 main函数已给定,提交时只需要提交main函数外的代码部分。 #include<iostream> #include<cstring> using namespace std; //你提交的代码在这里 int main() { Student stu1; cout<<"Show object stu1:"; cout<<stu1.GetId()<<"-"<<stu1.GetName()<<"-"<<stu1.GetScore()<<endl; int no,s; char xm[9]; cin>>no>>xm>>s; Student stu2(no,xm,s); cout<<"Show object stu2:"; cout<<stu2.GetId()<<"-"<<stu2.GetName()<<"-"<<stu2.GetScore()<<endl; cin>>no>>xm>>s; cout<<"Reset and Show object stu1:"; stu1.Set(no,xm,s); stu1.Show(); cout<<"Reset and Show object stu2:"; stu2.Set(); stu2.Show(); return 0; }
```
#include<iostream>
#include<cstring>
using namespace std;
class Student {
private:
int Id;
char name[9];
int score;
public:
Student() {
Id = 0;
strcpy(name, "");
score = 0;
}
Student(int no, char* xm, int s) {
Id = no;
strcpy(name, xm);
score = s;
}
void Set(int no, char* xm, int s) {
Id = no;
strcpy(name, xm);
score = s;
}
void Set() {
int no, s;
char xm[9];
cin >> no >> xm >> s;
Id = no;
strcpy(name, xm);
score = s;
}
int GetId() {
return Id;
}
char* GetName() {
return name;
}
int GetScore() {
return score;
}
void Show() {
cout << Id << "-" << name << "-" << score << endl;
}
};
int main() {
Student stu1;
cout << "Show object stu1:";
cout << stu1.GetId() << "-" << stu1.GetName() << "-" << stu1.GetScore() << endl;
int no, s;
char xm[9];
cin >> no >> xm >> s;
Student stu2(no, xm, s);
cout << "Show object stu2:";
cout << stu2.GetId() << "-" << stu2.GetName() << "-" << stu2.GetScore() << endl;
cin >> no >> xm >> s;
cout << "Reset and Show object stu1:";
stu1.Set(no, xm, s);
stu1.Show();
cout << "Reset and Show object stu2:";
stu2.Set();
stu2.Show();
return 0;
}
```
设计一个学生类Student,成员数据包含学号(int Id),姓名(char name[40])和成绩(int score)。 程序功能:首先读入n个学生数据;然后按照学生成绩升序排列,如果有成绩相同的则按照学号升序排列;最后输出所有学生的信息。 main函数已给定,提交时只需要提交main函数外的代码部分。 #include<iostream> #include<cstring> using namespace std; //你提交的代码在这里 int main() { int i,j,n; Student t; cin>>n; Student *stu=new Student[n]; for(i=0;i<n;i++) cin>>stu[i]; for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) if(stu[j]>stu[j+1]) { t=stu[j]; stu[j]=stu[j+1]; stu[j+1]=t; } for(i=0;i<n;i++) cout<<i+1<<":"<<stu[i]<<endl; delete[]stu; return 0; }输入3 1001 Alice 85 1002 White 75 1003 Tom 90输出1:id=1002,name=White,score=75 2:id=1001,name=Alice,score=85 3:id=1003,name=Tom,score=90请补充完整代码
```
#include<iostream>
#include<cstring>
using namespace std;
class Student{
private:
int Id;
char name[40];
int score;
public:
Student(){}
friend istream& operator>>(istream& in, Student& s);
friend ostream& operator<<(ostream& out, const Student& s);
bool operator>(const Student& s) const;
};
istream& operator>>(istream& in, Student& s){
in >> s.Id >> s.name >> s.score;
return in;
}
ostream& operator<<(ostream& out, const Student& s){
out << "id=" << s.Id << ",name=" << s.name << ",score=" << s.score;
return out;
}
bool Student::operator>(const Student& s) const{
if(score == s.score) return Id < s.Id;
return score < s.score;
}
int main(){
int i,j,n;
Student t;
cin >> n;
Student *stu = new Student[n];
for(i = 0; i < n; i++) cin >> stu[i];
for(i = 0; i < n-1; i++)
for(j = 0; j < n-i-1; j++)
if(stu[j] > stu[j+1]){
t = stu[j];
stu[j] = stu[j+1];
stu[j+1] = t;
}
for(i = 0; i < n; i++) cout << i+1 << ":" << stu[i] << endl;
delete []stu;
return 0;
}
```
阅读全文