以下代码建立了一个物件数组Student,并展示了如何计算物件数组的长度,如何从物件数组中找到特定的对象,如何根据数组的不同参数进行排序,以及如何找到最大和最小值。
#include <iostream>
#include <algorithm>
using namespace std;
class Student{
public:
string Name;
int Age;
char Gender;
float ProgrammingGrade;
Student(string name, int age, char gender, float programmingGrade){
Name = name;
Age = age;
Gender = gender;
ProgrammingGrade = programmingGrade;
}
};
bool compareByGrade(const Student& s1, const Student& s2){
return s1.ProgrammingGrade < s2.ProgrammingGrade;
}
bool compareByName(const Student& s1, const Student& s2){
return s1.Name < s2.Name;
}
int main(){
Student students[5] = {
{"John", 20, 'm', 9},
{"Bob", 21, 'm', 8},
{"Alice", 19, 'm', 9.2},
{"Eve", 20, 'm', 8.5},
{"Jefferey", 23, 'm', 7.2}
};
// 如何找到物件数组的长度
int arrSize = *(&students + 1) - students;
// cout << "The length is: " << arrSize << endl;
// Search
for(int i = 0; i < arrSize; i++){
if(students[i].Name == "Alice"){
cout << "Alice found at index: " << i << endl;
break;
}
}
cout << "<--------------------------------------------->" << endl;
// Sort
sort(students, students + arrSize, compareByGrade);
// sort(students, students + arrSize, compareByName);
for(int i = 0; i < arrSize; i++){
cout << students[i].Name << " " << students[i].ProgrammingGrade << " " << endl;
}
cout << "<--------------------------------------------->" << endl;
// Max and Min
Student* maxGradeStudent = max_element(students, students + arrSize, compareByGrade);
cout << "The max grade student is: " << maxGradeStudent->Name << " " << endl;
Student* minGradeStudent = min_element(students, students + arrSize, compareByGrade);
cout << "The min grade student is: " << minGradeStudent->Name << " " << endl;
return 0;
}
Alice found at index: 2
<--------------------------------------------->
Jefferey 7.2
Bob 8
Eve 8.5
John 9
Alice 9.2
<--------------------------------------------->
The max grade student is: Alice
The min grade student is: Jefferey