一、結構體定義和使用
在C++中,結構體可以用於存儲不同類型的數據,在一個數據結構中組合起來。比如,我們可以定義一個結構體來存儲學生的姓名、年齡和成績:
struct Student { string name; int age; double score; };
我們可以通過定義一個結構體變數來存儲一個學生的信息:
Student stu1; stu1.name = "Tom"; stu1.age = 18; stu1.score = 95.5;
結構體也可以用數組的方式來創建多個結構體變數:
Student stu_list[3]; stu_list[0].name = "Tom"; stu_list[0].age = 18; stu_list[0].score = 95.5; stu_list[1].name = "Jerry"; stu_list[1].age = 19; stu_list[1].score = 87.5; stu_list[2].name = "Lisa"; stu_list[2].age = 20; stu_list[2].score = 90.0;
我們可以通過遍曆數組來輸出所有結構體變數:
for(int i=0; i<3; i++) { cout << "Name: " << stu_list[i].name << ", "; cout << "Age: " << stu_list[i].age << ", "; cout << "Score: " << stu_list[i].score << endl; }
以上代碼的輸出結果為:
Name: Tom, Age: 18, Score: 95.5 Name: Jerry, Age: 19, Score: 87.5 Name: Lisa, Age: 20, Score: 90
二、結構體排序
如果我們想要按照學生成績的高低來排序,可以使用C++的自定義排序函數和STL中的sort函數。
bool cmp(Student a, Student b) { return a.score > b.score; } sort(stu_list, stu_list+3, cmp);
以上代碼中,cmp為自定義的排序函數,用於比較兩個學生的成績。sort函數用於對stu_list數組進行排序。排序後的輸出結果為:
Name: Tom, Age: 18, Score: 95.5 Name: Lisa, Age: 20, Score: 90 Name: Jerry, Age: 19, Score: 87.5
三、結構體分組
如果我們想要按照學生的年齡來分組,我們可以定義一個包含多個學生的結構體數組,並使用vector來存儲不同年齡段的學生信息:
struct AgeGroup { int age; vector students; }; vector age_groups; for(int i=0; i<3; i++) { bool flag = false; for(int j=0; j<age_groups.size(); j++) { if(age_groups[j].age == stu_list[i].age) { age_groups[j].students.push_back(stu_list[i]); flag = true; break; } } if(!flag) { AgeGroup age_group; age_group.age = stu_list[i].age; age_group.students.push_back(stu_list[i]); age_groups.push_back(age_group); } }
以上代碼中,我們遍歷了所有學生(stu_list數組),根據每個學生的年齡找到對應的年齡組。如果年齡組不存在,我們創建一個新的年齡組(age_group),並將學生加入該組,如果年齡組已存在,我們直接將學生加入該年齡組的學生列表中(age_groups[j].students)。
我們可以將分組後的信息輸出到控制台:
for(int i=0; i<age_groups.size(); i++) { cout << "Age: " << age_groups[i].age << endl; for(int j=0; j<age_groups[i].students.size(); j++) { cout << "Name: " << age_groups[i].students[j].name << ", "; cout << "Age: " << age_groups[i].students[j].age << ", "; cout << "Score: " << age_groups[i].students[j].score << endl; } }
以上代碼的輸出結果為:
Age: 18 Name: Tom, Age: 18, Score: 95.5 Age: 19 Name: Jerry, Age: 19, Score: 87.5 Age: 20 Name: Lisa, Age: 20, Score: 90
四、結構體的嵌套使用
在上面的例子中,我們使用了兩個結構體:Student和AgeGroup。其實,我們也可以在結構體中嵌套使用其他結構體:
struct Course { string name; vector students; }; struct Teacher { string name; vector courses; };
以上代碼中,我們創建了一個Course結構體,用於存儲課程信息,包括課程名稱和選修該課程的學生列表。我們還創建了一個Teacher結構體,用於存儲老師的信息,包括老師的姓名和教授的課程列表。
我們可以使用如下方式來初始化Teacher結構體變數:
Teacher teacher; teacher.name = "Mr. Smith"; Course course1; course1.name = "Math"; course1.students = {stu1, stu2}; Course course2; course2.name = "Physics"; course2.students = {stu3, stu4}; teacher.courses = {course1, course2};
以上代碼中,我們使用了之前定義的stu1、stu2、stu3、stu4四個學生結構體變數。
我們可以使用類似之前的方式來遍歷和輸出Teacher結構體中的信息:
cout << "Teacher: " << teacher.name << endl; for(int i=0; i<teacher.courses.size(); i++) { cout << "Course: " << teacher.courses[i].name << endl; for(int j=0; j<teacher.courses[i].students.size(); j++) { cout << "Name: " << teacher.courses[i].students[j].name << ", "; cout << "Age: " << teacher.courses[i].students[j].age << ", "; cout << "Score: " << teacher.courses[i].students[j].score << endl; } }
以上代碼的輸出結果為:
Teacher: Mr. Smith Course: Math Name: Tom, Age: 18, Score: 95.5 Name: Jerry, Age: 19, Score: 87.5 Course: Physics Name: Lisa, Age: 20, Score: 90 Name: Kate, Age: 19, Score: 82.5
總結
在C++中,使用結構體可以方便地組合不同類型的數據,並對數據進行分組、排序、嵌套等一系列操作。這些操作能夠方便地對現實中的數據進行模擬和處理,為C++工程師提供了強有力的工具。
原創文章,作者:JJPPA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/324835.html