• 【C++程序员必修第一课】C++基础课程-15:struct 数据结构


    1 本课主要内容:

    • struct 数据结构(也叫结构体)是什么?它的使用场景?
    • 结构体的定义语法
    • 结构体作为函数形参和返回值的应用
    • 用动态数组管理结构体数据
    • C++ 结构体支持构造函数、析构函数和结构体函数

    2 主要知识点:

    • struct 结构体是什么?

    struct 结构体就是用 struct 修饰,将一个或多个数据类型包含在一个结构里面,方便使用和管理

    • struct 结构体的使用场景

    现实应用场景中,很多的物体的描述都需要多个数据类型组合到一起来表示,如一个人会有名称、性别、年龄、身高等;一台正在销售空调会有品牌名称、型号、产地、匹数、价格等等;这个时候就可以用到 struct 结构体来表示;

    • 结构体的定义语法

    结构体定义语法:

    struct struct_name {

    member_type1 member_name1;

    member_type2 member_name2;

    ...

    member_typeN member_nameN;

    };

    1. // 结构体声明(可选)
    2. struct BillInfo;
    3. // 结构体定义例子:帐单信息
    4. struct BillInfo {
    5. int m_billId{ 0 }; // 帐单编号
    6. char m_account[260]{}; // 客户名称
    7. float m_amount{ 0.0 }; // 帐单金额
    8. };
    9. BillInfo billInfo; // 定义结构体对象
    10. billInfo.m_billId = 1; // 给结构体对象成员变量赋值
    11. strcpy(billInfo.m_account, "User1"); // 给结构体对象成员变量赋值
    12. billInfo.m_amount = 230.50; // 给结构体对象成员变量赋值
    13. const float f = billInfo.m_amount; // 访问结构体对象成员变量
    14. std::cout << "amount:" << f << std::endl;
    • 结构体用于函数形参

    1. // 结构体做为函数参数例子:
    2. void add_bill_info(const BillInfo& billInfo)
    3. {
    4. std::cout << "billId : " << billInfo.m_billId << std::endl;
    5. }
    6. // 生成 100 个结构体数据
    7. BillInfo billInfo;
    8. for (int id = 1; id <= 100; ++id) {
    9. billInfo.m_billId = id;
    10. sprintf(billInfo.m_account, "User%d", id);
    11. billInfo.m_amount = 230.50;
    12. add_bill_info(billInfo); // 调用函数,传递结构体形参
    13. }
    • 结构体用于函数返回值

    1. // 根据 billId 获取结构体数据
    2. BillInfo get_bill_info(int billId)
    3. {
    4. BillInfo billInfo;
    5. billInfo.m_billId = billId;
    6. // ...
    7. return billInfo;
    8. }
    9. for (int id = 1; id <= 10; ++id) {
    10. BillInfo billInfo = get_bill_info(id);
    11. // 获取结构体数据
    12. std::cout << "billId : " << billInfo.m_billId << std::endl;
    13. }
    • 利用 vector 动态数组管理结构体数据

    1. #include
    2. std::vector billInfoList; // 帐单列表
    3. void set_bill_infos(const std::vector& billInfoList)
    4. {
    5. for (const auto & billInfo : billInfoList) {
    6. // 访问数组结构体成员
    7. const int billId = billInfo.m_billId;
    8. std::cout << i << " billId : " << billId << std::endl;
    9. }
    10. // ...
    11. }
    12. for (int i = 0; i < 100; i++) {
    13. // 构造结构体数据
    14. const int id = i + 1;
    15. BillInfo billInfo;
    16. billInfo.m_billId = id;
    17. sprintf(billInfo.m_account, "User%d", id);
    18. billInfo.m_amount = 230.50;
    19. // 放入数组
    20. billInfoList.push_back(billInfo);
    21. }
    22. // 把结构体数组放入函数形参
    23. set_bill_infos(billInfoList);
    • 用 typedef struct 定义结构体别名

    1. typedef struct AccountInfo
    2. {
    3. ...
    4. }ACCOUNT_INFO;
    5. ACCOUNT_INFO account1;
    • C++ 结构体的函数

    C++ 结构体支持构造函数、析构函数,和普通结构体函数

    构造函数、析构函数详细内容,在下一节【class 类(上)】课程进行讲解

    结构体函数例子:

    1. // 普通结构体函数例子
    2. struct AccountInfo {
    3. // 帐号和密码登录验证
    4. bool login(const std::string& account, const std::string& password) const {
    5. return m_account == account && m_password == password;
    6. }
    7. // 结构体成员变量
    8. std::string m_account;
    9. std::string m_password;
    10. };

    3 课后练习:

    • 完善上一课程的练习,用 struct 结构体来定义用户信息,除了用户名称,再增加用户编号、性别、年龄等信息;同时用 std::vector 动态数组来管理用户列表;实现以下相同指令功能:
    • "add" : 新建一个用户;用户编号自增长,用户名称提示用户输入
    • "delete" : 删除一个用户;提示用户输入要删除的用户编号
    • "list" : 列出所有用户信息(包括用户编号、用户名称等)
    • "quit" : 退出程序

    附录:在线视频课程

    进入视频号学习本文配套视频课程。

    -【End】-

    哈喽,大家好!我是喜欢coding的小二,一枚“靓仔又不掉头发”的C++开发大头兵;欢迎围观公众号(20YC编程),定期会分享一些技术开发经验、行业资讯、业界动态等。期待您的关注,一起交流学习进步。

    #下载示例源码和开发工具,请进入公众号首页,点击(发消息)最下方的(资源下载)菜单即可获取。

    喜欢本文章,记得点赞、分享、关注哦~

  • 相关阅读:
    MySQL主从复制与读写分离
    秋招大厂184道阿里、百度、腾讯、头条Java面试题合集
    SMALE实验室论文成果:多标签学习CSDN源码
    【配置环境】SQLite数据库安装和编译以及VS下C++访问SQLite数据库
    CrystalNet ADO.Net VCL for Delphi
    音频之Android NDK读写声卡
    [C++]多态是如何调用不同的函数对象的?
    【Java】阿拉伯数字转汉字(完全符合中文阅读习惯)(支持所有整数类型)
    Ansible-变量-迭代-jinja2模版
    学习笔记16--汽车运动控制理论之经典控制理论
  • 原文地址:https://blog.csdn.net/yanghz/article/details/134012843