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日

相关文章

  • Pytorch生成随机数Tensor的方法汇总

    PyTorch生成随机数Tensor的方法汇总可以使用以下方式: 1. 使用torch.rand方法创建随机数Tensor 使用torch.rand方法可以创建一个给定形状的张量,并根据指定规则填充随机值。 示例如下: import torch # 创建一个形状为(2,3)的张量,所有的值都是随机生成的 rand_tensor = torch.rand(2,…

    人工智能概论 2023年5月25日
    00
  • django接入新浪微博OAuth的方法

    我将为你详细讲解“Django接入新浪微博OAuth的方法”的完整攻略。 什么是OAuth? OAuth(开放授权)是一种授权框架,允许第三方应用程序通过无需提供用户名和密码而访问用户账户的API。 Django接入新浪微博OAuth的方法 要在Django中接入新浪微博OAuth,我们需要进行以下步骤: 步骤一:使用pip安装Python的OAuth库 p…

    人工智能概览 2023年5月25日
    00
  • Spring Cloud详解实现声明式微服务调用OpenFeign方法

    下面是“Spring Cloud详解实现声明式微服务调用OpenFeign方法”的完整攻略。 1. 前置知识 在介绍如何使用OpenFeign进行声明式微服务调用之前,需要先了解以下内容: 1.1 微服务架构 微服务架构是一种将应用程序拆分为一组较小、独立、自治的服务的方法。每个服务都运行在其独立的进程中,可以使用轻量级机制(如HTTP资源API)进行通信。…

    人工智能概览 2023年5月25日
    00
  • Linux+Nginx+Php架设高性能WEB服务器

    下面我将详细讲解如何使用Linux+Nginx+Php架设高性能WEB服务器的完整攻略,主要分为以下几个步骤: 1.安装Linux操作系统 首先,我们需要选择一款适合自己的Linux操作系统,例如CentOS、Ubuntu等。 在安装Linux操作系统时,可以选择命令行或者图形界面进行安装。命令行安装相比于图形界面,占用资源更少,并且更加灵活。 2.安装Ng…

    人工智能概览 2023年5月25日
    00
  • Ubuntu上安装Nginx服务器程序及简单的环境配置小结

    下面是详细讲解“Ubuntu上安装Nginx服务器程序及简单的环境配置小结”的完整攻略: 安装Nginx 1. 更新软件源 在终端中执行以下命令: sudo apt update 2. 安装Nginx 在终端中执行以下命令: sudo apt install nginx 3. 启动Nginx 在终端中执行以下命令: sudo systemctl start …

    人工智能概览 2023年5月25日
    00
  • 键盘的安全之密码与键盘之间的对抗(图)

    键盘的安全之密码与键盘之间的对抗(图) 介绍 在现代社会中,密码作为人们保护信息安全的重要方式之一,扮演着非常重要的角色。而键盘作为输入密码的主要方式,也是攻击者攻击密码的主要对象之一。本篇文章着重探讨了密码与键盘之间的对抗,并提供了一些预防和避免键盘安全问题的方法。 键盘记录器攻击 键盘记录器是一种可以记录所有键盘输入的硬件或软件设备。当用户输入密码时,键…

    人工智能概览 2023年5月25日
    00
  • SpringBoot创建RSocket服务器的全过程记录

    下面是关于Spring Boot创建RSocket服务器的全过程记录。 RSocket简介 RSocket是一种基于Reactive Streams规范并且支持多种传输协议的全双工网络通信协议,可以实现高效、可扩展、快速启动的微服务通信。它由Netty、Reactor和Spring团队合作开发,提供Java、Kotlin和其他语言的客户端和服务器端实现,是S…

    人工智能概览 2023年5月25日
    00
  • 树莓派极简安装OpenCv的方法步骤

    下面是详细讲解“树莓派极简安装 OpenCV 的方法步骤”的完整攻略: 1. 准备工作 首先,需要准备以下物品: 树莓派(建议使用树莓派 3B+ 或者更新版本) SD 卡(建议使用 32GB 及以上容量,使用 Class 10 以上速度的 SD 卡) SD 卡读卡器 电脑 HDMI 显示器(可选) HDMI 线(可选) 2. 安装操作系统 可以使用官方提供的…

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