【C++配置yaml】yaml-cpp使用

yaml-cpp

》》参考资料1
》》参考资料2

文章目录

  • yaml-cpp
    • 下载安装
    • yaml-cpp使用
      • Node
      • node的增改查删
      • Node 相关API
      • yaml文件解析

下载安装

安装yaml-cpp

git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build && cd build
cmake .. && make -j
sudo make install

CMakeLists配置

find_package(yaml-cpp REQUIRED)
include_directories(${YAML_CPP_INCLUDE_DIR})
# add_executable (main ${COMMON}) #连接编译编译路径
# 动态连接yaml库
target_link_libraries(main yaml-cpp::yaml-cpp)

yaml-cpp使用

Node

Node是yaml-cpp中最重要的数据结构,Node一共有以下几种type

  1. Null 空节点
  2. Sequence 序列,类似于一个Vector,对应YAML格式中的数组
  3. Map 类似标准库中的Map,对应YAML格式中的对象
  4. Scalar 标量,对应YAML格式中的常量

node的增改查删

#include <iostream>
#include <fstream>
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <assert.h>int main()
{YAML::Node node1;assert(node1.IsNull());  //1. 初始化的节点是Null类型node1["key"] = "value"; //2. 当你给它赋值键值对,它转变为Map类型node1["number"] = 255;assert(node1.IsMap()); node1["seq"].push_back("first element");//seq对应的是一个Sequencenode1["seq"].push_back("second element");std::cout << node1 << std::endl;/*输出结果:key: valuenumber: 255seq:- first element- second element*/node1.remove("key"); //删除YAML::Node node2;  node2.push_back("first item");//3. 它是一个sequence类型node2.push_back("second_item");node2.push_back("third_item");std::vector<int> v = {1,3,5,7,9};//给node_2插入了一个Sequencenode2.push_back(v);assert(node2.IsSequence());//当然,node_2仍然是一个Sequencefor(auto it = node2.begin(); it != node2.end(); it++)std::cout << *(it) << std::endl;/*输出结果:first itemsecond_itemthird_item- 1- 3- 5- 7- 9*/node2.remove(0);//删除first itemnode2[0] = "new fir";/*修改后second_itemnew fir- 1- 3- 5- 7- 9*/
}

Node 相关API

  • .IsDefined():判断是否存在。
  • .as<type>():获取对应值。
  • .Type():获取对应的类型{ Undefined, Null, Scalar, Sequence, Map };(0,1,2,3,4)

yaml文件解析

用 loadFile() 可从文件生成Node

Node LoadFile(const std::string& filename)
//filename 就是yaml文件的路径

实战:

  • test.yaml
name: xiaoming
sex: male
age: 18
system:port: 0value: 0int_vec: [10, 20]
  • cpp文件
#include "log.h"
#include <iostream>
#include <fstream>
#include <yaml-cpp/yaml.h>
#include <iostream>
#include <assert.h>int main()
{YAML::Node node = YAML::LoadFile("./test.yaml");//获取类型std::cout << node.Type() << std::endl; //4std::cout << node["name"].Type() << std::endl;//2//获取内容std::cout << node["name"].as<std::string>() << std::endl;//xiaomingstd::cout << node["sex"].as<std::string>() << std::endl;//malestd::cout << node["age"].as<int>() << std::endl;//18std::cout << node["system"]["port"].as<std::string>() << std::endl;//8080std::cout << node["system"]["value"].as<std::string>() << std::endl;//0for(auto it = node["system"]["int_vec"].begin(); it != node["system"]["int_vec"].end(); it++)std::cout << *it << std::endl;//10 20//方式2for(auto it = node.begin(); it != node.end(); it++)//first指向key , second指向valuestd::cout << it->first << "  " << it->second << std::endl;/*读取结果name  xiaomingsex  maleage  18system  port: 0value: 0int_vec: [10, 20]*///读取不存在的node值,报YAML::TypedBadConversion异常try{std::string label = node["label"].as<std::string>();}catch(YAML::TypedBadConversion<std::string> &e){std::cout<<"label node is NULL"<<std::endl;}//修改node["mg"] = 2;//保存config为yaml文件std::ofstream fout("./test.yaml"); fout << node;fout.close();return 0;
}
  • 修改后test.yaml
name: xiaoming
sex: male
age: 18
system:port: 0value: 0int_vec: [10, 20]
mg: 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt QML 入门】TextArea

TextArea也是一个多行文本编辑器。TextArea相比texttedit&#xff0c;增加了占位符文本&#xff0c;并添加了样式定义。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: trueTextArea {id: taanchors.centerIn: …

解决Visual Studio 各版本都出现新建项目后解决方案下没有文件和项目问题

一步一步创建C#控制台应用程序也会出错&#xff0c;这个你可能不会相信&#xff0c;我就遇到了这么一次&#xff0c;就在刚刚&#xff0c;是的&#xff0c;我都不敢相信&#xff0c;用了这么多年的新建一个控制台程序居然不正常了。新建完毕发现里面什么都没有&#xff0c;除了…

飞天使-docker知识点10-docker总结

文章目录 docker 知识点汇总docker chatgpt解释学习路线 docker 知识点汇总 docker 基础用法 docker 镜像基础用法 docker 容器网络 docker 存储卷 dockerfile docker仓库 harbor docker-compose docker chatgpt解释学习路线 学习Docker可以帮助你了解容器化技术&#xff0c…

首发卡密引流系统源码

程序特色&#xff1a; 支持个人和企业小程序广告获取卡密。 支持短视频点赞和关注获取卡密。 搭建教程&#xff1a; 环境要求&#xff1a;Nginx、MySQL 5.6、PHP 5.6 步骤&#xff1a; 将压缩包解压至网站根目录。 打开域名/install&#xff0c;按照提示填写数据库信息进行…

JS对象循环引用的危害:你知道吗?

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

移动端机器学习框架 MDL 简介与实践

Mobile-deep-learning&#xff08;MDL&#xff09; MDL 是百度研发的可以部署在移动端的基于卷积神经网络实现的移动端框架&#xff0c;可以应用在图像识别领域。 具体应用&#xff1a;在手机百度 App 中&#xff0c;用户只需要点击自动拍开关&#xff0c;将手机对准物体&…

联想王传东:AI PC迈入AI Ready 即将开启AI On

“AI PC已经正式迈入AI Ready 阶段&#xff0c;接下来会逐渐进入到AI On阶段。”12月16日&#xff0c;英特尔人工智能创新应用大赛启动仪式在深圳举办。作为独家AI PC合作伙伴&#xff0c;联想集团副总裁、中国区首席市场官王传东代表公司出席仪式并致辞。 王传东认为AI PC的发…

MySQL查询,条件查询、模糊查询、限制查询...

## 检索限制 SELECT DISTINCT event_id FROM sign_guest; # distinct作用于它后面写的所有列 SELECT * FROM sign_guest LIMIT 5; # 返回数据不多余5条 SELECT * FROM sign_guest LIMIT 2,4; # 第一个数是开始的位置&#xff0c;第二个数是要返回的数据条数#### 排序检索## o…

《哥德尔证明》阅读笔记——一致性问题

前言 从第一次了解到哥德尔不确定性原理时&#xff0c;我就被此定理的内涵和意义所吸引&#xff0c;也对这个定理的证明过程充满兴趣&#xff0c;最近闲暇时&#xff0c;买了这本《哥德尔证明》的书&#xff0c;希望理解这个意义重大的数学定理的核心&#xff0c;在此做一个阅…

大模型Transformer 推理 :kvCache原理浅析

大模型Transformer 推理 :kvCache原理浅析 kvCache 原理 在采样时,Transformer模型会以给定的提示/上下文作为初始输入进行推理(可以并行处理),然后逐一生成额外的标记来继续完善生成的序列(体现了模型的自回归性质)。在采样过程中,Transformer会执行自注意力操作,为…

27系列DGUS智能屏发布:可实时播放高清模拟信号摄像头视频

针对高清晰度的模拟信号摄像头视频画面的显示需求&#xff0c;迪文特推出27系列DGUS智能屏。该系列智能屏可适配常见的AHD摄像头、CVBS摄像头&#xff0c;支持单路1080P高清显示、两路720P同屏显示&#xff08;同一类型摄像头&#xff09;。用户通过DGUS简单开发即可实现摄像头…

【送书活动】智能汽车、自动驾驶、车联网的发展趋势和关键技术

文章目录 前言01 《智能汽车》推荐语 02 《SoC底层软件低功耗系统设计与实现》推荐语 03 《SoC设计指南》推荐语 05 《智能汽车网络安全权威指南&#xff08;上册&#xff09;》推荐语 06 《智能汽车网络安全权威指南&#xff08;下册&#xff09;》推荐语 后记赠书活动 前言 …

mac安装pnpm与使用

1、什么是pnpm&#xff1f; pnpm 全称 performant npm&#xff0c;意思是高性能的 npm。pnpm 由 npm/yarn 衍生而来&#xff0c;解决了 npm/yarn 内部潜在的 bug&#xff0c;极大的优化了性能&#xff0c;扩展了使用场景。被誉为 “最先进的包管理工具”。 2、pnpm特点 速度…

虚拟机启动 I/O error in “xfs_read_agi+0x95“

1.在选择系统界面按e 进入维护模式 2.找到ro把ro改成 rw init/sysroot/bin/sh 然后按Ctrlx 3.找到坏掉的分区&#xff0c;以nvme0n1p3为例进行修复 xfs_repair -d /dev/nvme0n1p3 4.init 6 重新启动 以下情况 先umount 再修复 则修复成功

接口测试 — 4.Requests库GET、Post请求

Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求。 &#xff08;不带参数的GET请求请看上一篇文章的练习&#xff09; 1、Requests库待参数的GET请求 使用Get方法带参数请求时&#xff0c;是params参数字典&#xff0c;而不是data参数字典。data参数字典…

dcoker-compose一键部署EFAK —— 筑梦之路

简介 EFAK&#xff08;Eagle For Apache Kafka&#xff0c;以前称为 Kafka Eagle&#xff09;是一款由国内公司开源的Kafka集群监控系统&#xff0c;可以用来监视kafka集群的broker状态、Topic信息、IO、内存、consumer线程、偏移量等信息&#xff0c;并进行可视化图表展示。独…

Lambda 表达式的常见用法

文章目录 Lambda 表达式的常见用法使用Lambda表达式集合遍历使用Lambda表达式排序使用Lambda表达式过滤使用Lambda表达式映射使用Lambda表达式归约使用Lambda表达式分组使用Lambda表达式函数式接口的实现使用Lambda表达式线程的创建使用Lambda表达式进行Optional 操作使用Lambd…

Arduino中以太网Udp通信

目录 1、测试硬件 2、程序 &#xff08;0&#xff09;头文件添加 &#xff08;1&#xff09;变量定义 &#xff08;2&#xff09;初始化程序 &#xff08;3&#xff09;循环执行程序 3、程序下载 &#xff08;1&#xff09;开发板控制器和端口号选择 &#xff08;2&am…

pycharm某个xxx.sh文件显示问号,无法编辑

文章目录 pycharm某个xxx.sh文件显示问号,无法编辑其他参考 pycharm某个xxx.sh文件显示问号,无法编辑 问题描述&#xff1a;pycharm某个xxx.sh文件显示问号,无法编辑 问题分析&#xff1a; pycharm无法识别文件类型。 问题解决&#xff1a; 在pycharm中选中该文件&#xff0…

BugKu-Web-滑稽

题目环境 持续的动态图片 F12审查元素 拿下flag&#xff1a;flag{595d994a34342417bfc3a3c3a23e0a48}