#include<iostream>
using namespace std;
class Student{
double *grades;
int courseNo;
double cgpa;
public:
Student(int n, double *g, double cg=0){
courseNo=n;
grades=new double[courseNo];
for(int i=0;i<courseNo;i++){
grades[i]=g[i];
}
if(cg==0){
double sum=0;
for(int i=0;i<courseNo;i++){
sum+=grades[i];
}
cgpa=sum/courseNo;
}else{
cgpa=cg;
}
}
//copy constructor
Student(const Student& s){
courseNo=s.courseNo;
grades=new double[courseNo];
for(int i=0;i<courseNo;i++){
grades[i]=s.grades[i];
}
cgpa=s.cgpa;
}
//assign operator
Student& operator=(const Student& s){
if(this!=&s){
delete[] grades;
courseNo=s.courseNo;
grades=new double[courseNo];
for(int i=0;i<courseNo;i++){
grades[i]=s.grades[i];
}
cgpa=s.cgpa;
}
return *this;
}
//compare operator
bool operator>(Student& s){
return cgpa>s.cgpa;
}
friend ostream& operator<<(ostream&, Student&);
};
ostream& operator<<(ostream& out, Student& s){
out<<"([";
for(int i=0;i<s.courseNo;i++){
if(i==0)
out<<s.grades[i];
else
out<<", "<<s.grades[i];
}
out<<"], "<<s.cgpa<<")";
return out;
}
int main(){
double g1[] = {2.5, 3.0, 4.0};
double g2[] = {3.5, 3.7, 3.8};
double g3[] = {2.0, 2.5, 3.0};
double g4[] = {3.8, 4.0, 3.9};
Student arr[] = {
Student(3, g1),
Student(3, g2),
Student(3, g3),
Student(3, g4)
};
int n=4;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
Student temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for(int i=0;i<n;i++){
cout<<arr[i]<<endl;
}
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNsYXNzIFN0dWRlbnR7CiAgICBkb3VibGUgKmdyYWRlczsKICAgIGludCBjb3Vyc2VObzsKICAgIGRvdWJsZSBjZ3BhOwogICAgCiAgICBwdWJsaWM6CiAgICBTdHVkZW50KGludCBuLCBkb3VibGUgKmcsIGRvdWJsZSBjZz0wKXsKICAgICAgICBjb3Vyc2VObz1uOwogICAgICAgIGdyYWRlcz1uZXcgZG91YmxlW2NvdXJzZU5vXTsKICAgICAgICBmb3IoaW50IGk9MDtpPGNvdXJzZU5vO2krKyl7CiAgICAgICAgICAgIGdyYWRlc1tpXT1nW2ldOwogICAgICAgIH0KICAgICAgICBpZihjZz09MCl7CiAgICAgICAgICAgIGRvdWJsZSBzdW09MDsKICAgICAgICAgICAgZm9yKGludCBpPTA7aTxjb3Vyc2VObztpKyspewogICAgICAgICAgICAgICAgc3VtKz1ncmFkZXNbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2dwYT1zdW0vY291cnNlTm87CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIGNncGE9Y2c7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvL2NvcHkgY29uc3RydWN0b3IKICAgIFN0dWRlbnQoY29uc3QgU3R1ZGVudCYgcyl7CiAgICAgICAgY291cnNlTm89cy5jb3Vyc2VObzsKICAgICAgICBncmFkZXM9bmV3IGRvdWJsZVtjb3Vyc2VOb107CiAgICAgICAgZm9yKGludCBpPTA7aTxjb3Vyc2VObztpKyspewogICAgICAgICAgICBncmFkZXNbaV09cy5ncmFkZXNbaV07CiAgICAgICAgfQogICAgICAgIGNncGE9cy5jZ3BhOwogICAgfQogICAgLy9hc3NpZ24gb3BlcmF0b3IKICAgIFN0dWRlbnQmIG9wZXJhdG9yPShjb25zdCBTdHVkZW50JiBzKXsKICAgICAgICBpZih0aGlzIT0mcyl7CiAgICAgICAgICAgIGRlbGV0ZVtdIGdyYWRlczsKICAgICAgICAgICAgY291cnNlTm89cy5jb3Vyc2VObzsKICAgICAgICAgICAgZ3JhZGVzPW5ldyBkb3VibGVbY291cnNlTm9dOwogICAgICAgICAgICBmb3IoaW50IGk9MDtpPGNvdXJzZU5vO2krKyl7CiAgICAgICAgICAgICAgICBncmFkZXNbaV09cy5ncmFkZXNbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2dwYT1zLmNncGE7CiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICAKICAgIC8vY29tcGFyZSBvcGVyYXRvcgogICAgYm9vbCBvcGVyYXRvcj4oU3R1ZGVudCYgcyl7CiAgICAgICAgcmV0dXJuIGNncGE+cy5jZ3BhOwogICAgfQogICAgCiAgICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgU3R1ZGVudCYpOwogICAgCn07Cm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3V0LCBTdHVkZW50JiBzKXsKICAgIG91dDw8IihbIjsKICAgIGZvcihpbnQgaT0wO2k8cy5jb3Vyc2VObztpKyspewogICAgICAgIGlmKGk9PTApCiAgICAgICAgICAgIG91dDw8cy5ncmFkZXNbaV07CiAgICAgICAgZWxzZQogICAgICAgICAgICBvdXQ8PCIsICI8PHMuZ3JhZGVzW2ldOwogICAgfQogICAgb3V0PDwiXSwgIjw8cy5jZ3BhPDwiKSI7CiAgICByZXR1cm4gb3V0Owp9CmludCBtYWluKCl7CiAgICBkb3VibGUgZzFbXSA9IHsyLjUsIDMuMCwgNC4wfTsKICAgIGRvdWJsZSBnMltdID0gezMuNSwgMy43LCAzLjh9OwogICAgZG91YmxlIGczW10gPSB7Mi4wLCAyLjUsIDMuMH07CiAgICBkb3VibGUgZzRbXSA9IHszLjgsIDQuMCwgMy45fTsKCiAgICBTdHVkZW50IGFycltdID0gewogICAgICAgIFN0dWRlbnQoMywgZzEpLAogICAgICAgIFN0dWRlbnQoMywgZzIpLAogICAgICAgIFN0dWRlbnQoMywgZzMpLAogICAgICAgIFN0dWRlbnQoMywgZzQpCiAgICB9OwogICAgCiAgICBpbnQgbj00OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CgogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbiAtIGkgLSAxOyBqKyspIHsKCiAgICAgICAgICAgIGlmIChhcnJbal0gPiBhcnJbaiArIDFdKSB7CiAgICAgICAgICAgICAgICBTdHVkZW50IHRlbXAgPSBhcnJbal07CgogICAgICAgICAgICAgICAgYXJyW2pdID0gYXJyW2ogKyAxXTsKCiAgICAgICAgICAgICAgICBhcnJbaiArIDFdID0gdGVtcDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgY291dDw8YXJyW2ldPDxlbmRsOwogICAgfQogICAgCiAgICAKICAgIAp9CgoK
([2, 2.5, 3], 2.5)
([2.5, 3, 4], 3.16667)
([3.5, 3.7, 3.8], 3.66667)
([3.8, 4, 3.9], 3.9)