【C/C++语法基础】6.结构体(新手推荐):揭开神秘面纱,探索C语言中的“乐高积木”

前言

你们是否曾在学习C/C++的道路上,对着屏幕陷入沉思,疑惑于如何将多个不同类型的数据捆绑在一起,组成一个有机的整体?是否曾在数据管理的海洋中迷失,渴望有一种“乐高积木”般的能力,可以让你们随心所欲地搭建属于自己的数据结构?那么,结构体,就是你们需要的答案!

什么是结构体?

结构体,是C/C++语言中用于封装不同数据类型的“容器”,就像一个神秘的宝盒,可以把我们想要在一起的东西收藏起来。它允许我们将多个不同类型的数据项组合成一个单一的实体,从而让我们可以更加方便地管理和操作这些数据。

结构体如何使用?

结构体的使用非常简单,首先,我们需要定义一个结构体类型,这可以通过使用关键字struct来实现。比如:

struct Person {
    char name[50];
    int age;
    float height;
};

这个Person结构体类型包含了三个数据项:一个字符数组name用来存储姓名,一个整型变量age用来存储年龄,一个浮点型变量height用来存储身高。

定义了结构体类型之后,我们就可以创建结构体变量了,就像这样:

struct Person person1;

现在,我们有了一个person1变量,它可以存储一个人的姓名、年龄和身高信息。

真心给大家推荐由我主讲的性价比超高的《算法基础课》,想要学习更多ACM/蓝桥杯/CSP/NOIP算法竞赛知识,无论你是想要竞赛拿奖的大学生、想要在笔试面试中脱颖而出、或者是对计算机编程感兴趣的小朋友,都可以学习,一定不要错过!点此了解(官方群:746470220):https://www.starrycoding.com/course/1

结构体有什么用?

结构体的用途广泛,它是C/C++编程中处理复杂数据的重要工具。比如,我们可以用结构体来创建一个学生信息的列表,每个学生都有一个姓名、年龄和成绩,通过结构体,我们就可以将这些信息组织起来,方便地进行增删改查操作。
结构体还有什么需要注意的?
在使用结构体时,我们需要注意以下几点:

  • 结构体中的数据项默认是按照它们在结构体定义中的顺序存储的,就像乐高积木的拼接,每一块都按照顺序放置。

  • 结构体变量的大小取决于其中最大数据项的大小,因为计算机内存是按照字节分配的。

  • 结构体可以嵌套使用,也就是说,一个结构体中可以包含另一个结构体类型的数据项。

结构体排序

C++标准库提供了多种排序算法,其中最常用的是std::sort函数(需要引入<algorithm>头文件)。这个函数可以对任意类型的序列进行排序,包括结构体。

要使用std::sort对结构体进行排序,你需要提供一个比较函数,或者重载结构体的小于号运算符。

假设我们有一个结构体Student,包含学生的姓名和成绩:

struct Student {
    std::string name;
    int score;
};

我们想要对这个结构体数组按照成绩进行排序。首先,我们需要定义一个比较函数,用于比较两个Student结构体的大小:

bool compareStudentsByScore(const Student& a, const Student& b) {
    return a.score < b.score;
}

这个函数返回true如果a的分数小于b的分数,否则返回false。这样,std::sort会根据成绩对结构体数组进行升序排序。
接下来,我们可以这样使用std::sort:

#include <algorithm>  // std::sort
#include <vector>     // std::vector
#include <iostream>   // std::cout, std::endl

int main() {
    std::vector<Student> students = {
        {"Alice", 90},
        {"Bob", 85},
        {"Charlie", 95}
    };

    std::sort(students.begin(), students.end(), compareStudentsByScore);

    for (const auto& student : students) {
        std::cout << "Name: " << student.name << ", Score: " << student.score << std::endl;
    }

    return 0;
}
posted @ 2024-03-09 15:45  Eriktse0  阅读(70)  评论(0编辑  收藏  举报