使用yamlcpp对yaml文件简单的读写

本文介绍了如何使用Yaml-cpp库来读取和写入YAML文件。示例代码展示了读取学生和教师信息,以及如何写入新的配置数据到YAML文件中。通过加载配置文件,解析出学生和教师的姓名及年龄,并展示读取多条记录的方法。同时,还给出了写入新学生和教师信息到YAML文件的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

关于YAML文件基础可参考如下链接:

https://www.runoob.com/w3cnote/yaml-intro.html

Yaml-cpp下载

https://github.com/jbeder/yaml-cpp

本文代码路径:

https://gitee.com/old_uncle_huang/yaml-cpp-test

 

Yaml使用

读取

Yaml 结构

student:
  name: laohuangshu
  age: 18

代码:

    YAML::Node configNode = YAML::LoadFile("./config/config.yaml");
    std::string strStuName = configNode["student"]["name"].as<std::string>();
    int stuAge = configNode["student"]["age"].as<int>();
    cout<<"stuName:"<<strStuName<<" stuAge:"<<stuAge<<endl;

结果:

stuName:laohuangshu stuAge:18

Yaml结构:

teacher:
  -
    name: laohuangshu
    age: 18 
  -
    name: fengqingyang
    age: 80

代码:

    auto teachers = configNode["teacher"];
    for(uint32_t i = 0; i < teachers.size(); i++)
    {
         std::string strName = teachers[i]["name"].as<std::string>();
         int age = teachers[i]["age"].as<int>();
         cout<<"teacherName:"<<strName<<" teacherAge:"<<age<<endl;
    }

结果:

teacherName:laohuangshu teacherAge:18
teacherName:fengqingyang teacherAge:80

写入:

代码:

    YAML::Node nodeWrite; 
    nodeWrite["student"]["name"] = "laohuangshu";
    nodeWrite["student"]["age"] = 22;
    std::ofstream fout("./config/writeConfig.yaml");
    fout<<nodeWrite;
    fout.close();

Yaml文件

student:
  name: laohuangshu
  age: 22

代码:

    YAML::Node nodeWrite2; 
    auto teachers = nodeWrite2["teacher"];
    teachers[0]["name"] = "laohuangshu";
    teachers[0]["age"] = 22;

    teachers[1]["name"] = "fengqingyang";
    teachers[1]["age"] = 80;
   
    std::ofstream fout("./config/writeConfig.yaml");
    fout<<nodeWrite2;
    fout.close();

Yaml:

teacher:
  - name: laohuangshu
    age: 22
  - name: fengqingyang
    age: 80

 

 

 

 

### C++ 中常用的标准库和第三方库 #### 一、C++ 标准库 C++ 提供了一套丰富的标准库,这些库是编写高效且可移植代码的基础。主要组成部分包括: - **STL (Standard Template Library)**:提供容器类(如 `vector` 和 `map`)、算法以及迭代器的支持。 - **I/O 流**:支持文件操作与输入输出流管理。 - **内存管理**:自动垃圾回收机制之外的手动分配释放资源的方法。 - **多线程编程接口**:自 C++11 起引入了对并发处理的支持。 #### 二、C++ 第三方库概述 除了内置的标准库外,在实际项目开发过程中还会广泛采用多种成熟的开源或商业性质的第三方库来简化特定领域内的工作量并提高效率[^2]。 #### 三、部分常见第三方库列举 ##### Boost 库 Boost 是一套高质量通用组件集合,几乎涵盖了所有现代软件工程所需的功能模块,比如正则表达式匹配、图形图像处理等高级特性[^4]。 ##### Poco Libraries Poco 提供了一个轻量级框架用于构建网络应用和服务端解决方案;它包含了HTTP服务器/客户端实现、JSON/XML 解析等功能。 ##### YAML-CPP 这是一个专注于读写YAML格式配置文件的小型库[Yamlcpp 网址](https://github.com/jbeder/yaml-cpp),非常适合用来保存设置或者作为数据交换媒介[^3]。 ##### SQLite Modern CPP Wrapper 为了更便捷地访问SQLite数据库而设计的一层封装API,允许使用者以面向对象的方式执行SQL语句查询及事务控制。 ```cpp #include <sqlite_modern_cpp.h> using namespace sqlite; database db("example.db"); db << "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT);"; ``` ##### OpenCV Open Source Computer Vision Library(开放源码计算机视觉库), 主要应用于实时计算机视觉方面的工作,例如视频捕捉分析、物体识别跟踪等等。 ##### Qt Framework 跨平台 GUI 开发环境,不仅限于此还包括一系列辅助工具链帮助创建桌面应用程序界面原型快速迭代测试发布整个流程自动化程度较高。 #### 四、选择合适的第三方库时需要注意事项 当决定引入外部依赖项之前应当充分考虑其稳定性和社区活跃度等因素,并通过适当手段验证目标平台上是否存在潜在兼容性障碍等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老黄叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值