一、结构体定义和使用
在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; vectorstudents; }; vector age_groups; for(int i=0; i<3; i++) { bool flag = false; for(int j=0; j 以上代码中,我们遍历了所有学生(stu_list数组),根据每个学生的年龄找到对应的年龄组。如果年龄组不存在,我们创建一个新的年龄组(age_group),并将学生加入该组,如果年龄组已存在,我们直接将学生加入该年龄组的学生列表中(age_groups[j].students)。
我们可以将分组后的信息输出到控制台:
for(int i=0; i以上代码的输出结果为:
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; vectorstudents; }; 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: 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++工程师提供了强有力的工具。