c++ 读写yaml配置文件

标题:C++读写YAML配置文件完整攻略

简介

YAML是一种人类可读的数据序列化格式,通常用于配置文件、数据交换、日志记录等。本文将介绍如何在C++中读写YAML配置文件的完整攻略。

依赖

  • yaml-cpp:一个C++的YAML解析库,用于读写YAML格式文件,可以在官网(https://github.com/jbeder/yaml-cpp)上下载。

基本使用方法

  1. 加载YAML文件
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <fstream>

int main(int argc, char* argv[]) { 
    // 创建YAML文档对象
    YAML::Node config = YAML::LoadFile("config.yaml");

    // 输出整个文档流
    std::cout << "config:\n" << config << std::endl;

    // 访问文档中的值
    std::string name = config["name"].as<std::string>();
    int age = config["age"].as<int>();

    // 输出访问到的值
    std::cout << "name: " << name << ", age: " << age << std::endl;

    return 0;
}
  1. 存储YAML文件
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <fstream>

int main(int argc, char* argv[]) {
    // 创建YAML文档对象
    YAML::Emitter out;
    out << YAML::BeginMap;
    out << YAML::Key << "name";
    out << YAML::Value << "Lucy";
    out << YAML::Key << "age";
    out << YAML::Value << 18;
    out << YAML::EndMap;

    // 将文档对象写入文件中
    std::ofstream fout("config.yaml");
    fout << out.c_str(); // 或者用fout << out.c_str() << std::endl;
    fout.close();

    return 0;
}

示例一:读写vector

  1. 读取vector
nums:
    - 1
    - 3
    - 5
    - 7
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <fstream>
#include <vector>

int main(int argc, char* argv[]) {
    // 加载YAML文件
    YAML::Node config = YAML::LoadFile("config.yaml");

    // 访问文档中的vector
    std::vector<int> nums = config["nums"].as<std::vector<int>>();

    // 输出访问到的vector
    std::cout << "nums: ";
    for(auto num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

输出结果:

nums: 1 3 5 7
  1. 存储vector
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <fstream>
#include <vector>

int main(int argc, char* argv[]) {
    std::vector<int> nums = {1, 3, 5, 7};

    // 创建YAML文档对象
    YAML::Emitter out;
    out << YAML::BeginMap;
    out << YAML::Key << "nums";
    out << YAML::Value << YAML::BeginSeq;
    for(auto num : nums) {
        out << num;
    }
    out << YAML::EndSeq;
    out << YAML::EndMap;

    // 将文档对象写入文件中
    std::ofstream fout("config.yaml");
    fout << out.c_str();
    fout.close();

    return 0;
}

存储结果:

nums:
    - 1
    - 3
    - 5
    - 7

示例二:读写嵌套的map

  1. 读取嵌套map
person:
    name: John
    age: 22
    contact:
        email: john@example.com
        phone: 123456789
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <fstream>
#include <map>

int main(int argc, char* argv[]) {
    // 加载YAML文件
    YAML::Node config = YAML::LoadFile("config.yaml");

    // 访问文档中的值
    std::string name = config["person"]["name"].as<std::string>();
    int age = config["person"]["age"].as<int>();
    std::string email = config["person"]["contact"]["email"].as<std::string>();
    int phone = config["person"]["contact"]["phone"].as<int>();

    // 输出访问到的值
    std::cout << "name: " << name << ", age: " << age << std::endl;
    std::cout << "email: " << email << ", phone: " << phone << std::endl;

    return 0;
}

输出结果:

name: John, age: 22
email: john@example.com, phone: 123456789
  1. 存储嵌套map
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <fstream>
#include <map>

int main(int argc, char* argv[]) {
    // 创建YAML文档对象
    YAML::Emitter out;
    out << YAML::BeginMap;
    out << YAML::Key << "person";
    out << YAML::Value << YAML::BeginMap;
    out << YAML::Key << "name";
    out << YAML::Value << "John";
    out << YAML::Key << "age";
    out << YAML::Value << 22;
    out << YAML::Key << "contact";
    out << YAML::Value << YAML::BeginMap;
    out << YAML::Key << "email";
    out << YAML::Value << "john@example.com";
    out << YAML::Key << "phone";
    out << YAML::Value << 123456789;
    out << YAML::EndMap;
    out << YAML::EndMap;
    out << YAML::EndMap;

    // 将文档对象写入文件中
    std::ofstream fout("config.yaml");
    fout << out.c_str();
    fout.close();

    return 0;
}

存储结果:

person:
    name: John
    age: 22
    contact:
        email: john@example.com
        phone: 123456789

总结

到这里,我们已经介绍了C++读写YAML配置文件的完整攻略,并且给出了两个实际的示例,希望读者可以通过本文快速了解如何在C++中读写YAML格式的配置文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++ 读写yaml配置文件 - Python技术站

(1)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Python的Django框架中的Context使用

    下面是Python的Django框架中的Context使用的完整攻略: 什么是Context? Context是Django框架中一个非常重要的部分,它负责传递模板中需要的变量以及函数等信息。在Django框架中,Context通常是一个字典对象,其中键为变量名,值为对应变量的值。 如何定义Context? 在Django框架中,可以通过定义一个字典来创建C…

    人工智能概览 2023年5月25日
    00
  • C# 使用AspriseOCR.dll实现验证码识别

    C# 使用AspriseOCR.dll实现验证码识别 本文将介绍如何使用AspriseOCR.dll实现验证码识别,AspriseOCR.dll是一款非常优秀的OCR识别库,能够实现各种验证码的识别。 安装AspriseOCR.dll 首先,我们需要下载AspriseOCR.dll,可以在官网 https://asprise.com/ocr/ 下载。下载完成…

    人工智能概论 2023年5月25日
    00
  • 如何使用Java爬虫批量爬取图片

    如何使用 Java 爬虫批量爬取图片? 准备工作 在开始之前,需要准备以下工具: JDK:需要安装 JDK,这里我使用的是当前最新版本 JDK 11。 IntelliJ IDEA:使用官方提供的 IntelliJ IDEA 作为开发工具。 爬取网站首先需要找到一个合适的网站来进行图片爬取。这里我们以花瓣网为例,该网站有很多高质量的图片供我们下载:http:/…

    人工智能概论 2023年5月24日
    00
  • Spring Data MongoDB中实现自定义级联的方法详解

    标题:Spring Data MongoDB中实现自定义级联的方法详解 简介 Spring Data MongoDB是用来操作MongoDB的一个高级框架,提供了很多方便快捷的数据访问方案。本文将详细介绍如何在Spring Data MongoDB中实现自定义级联,同时提供两条示例说明。 自定义级联 在使用MongoDB数据库时,经常需要进行关联查询,而且不…

    人工智能概论 2023年5月25日
    00
  • 浅谈Django中view对数据库的调用方法

    下面是“浅谈Django中view对数据库的调用方法”的完整攻略: 前言 Django是一款使用了MTV(MVC的一种变形)模式的web框架,因此处理web应用中的请求和响应、数据库的调用等一系列操作,都需要使用到不同层级的组件。其中,view作为MVC中的控制器,在Django中负责接收客户端的请求并渲染响应,同时也是连接模型和模板的关键。在view中调用…

    人工智能概览 2023年5月25日
    00
  • 国内分布式框架Dubbo使用详解

    国内分布式框架Dubbo使用详解 什么是Dubbo Dubbo是阿里巴巴公司开源的一款高性能Java RPC框架(Remote Procedure Call Protocol),可以优化各应用之间的方法调用和远程调用,它提供了多种服务治理和负载均衡功能,可以快速链接多种RPC架构。 Dubbo主要功能 服务自动注册和发现 远程方法调用 负载均衡 服务容错 D…

    人工智能概览 2023年5月25日
    00
  • Android使用OKHttp库实现视频文件的上传到服务器功能

    下面我会详细讲解使用OKHttp库实现视频文件上传到服务器的步骤。 1. 引入OKHttp库 首先,在项目中引入OKHttp库,可以通过在build.gradle文件中添加以下代码: dependencies { implementation ‘com.squareup.okhttp3:okhttp:4.9.1’ } 2. 创建请求体 上传视频文件需要将视频…

    人工智能概论 2023年5月25日
    00
  • android高仿微信表情输入与键盘输入代码(详细实现分析)

    针对这个话题,我会从以下几个方面来详细讲解: 需求分析 在实现高仿微信表情输入与键盘输入之前,我们需要对需求进行深入分析。具体来说,我们需要考虑以下问题: 怎样实现点击表情图标弹出表情面板? 怎样实现点击输入框,弹出键盘? 怎样让表情面板和键盘能够切换? 如何实现表情和文字的输入? 界面设计 在需求分析之后,我们需要对界面进行设计,包括布局、界面元素样式等。…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部