标题:C++读写YAML配置文件完整攻略
简介
YAML是一种人类可读的数据序列化格式,通常用于配置文件、数据交换、日志记录等。本文将介绍如何在C++中读写YAML配置文件的完整攻略。
依赖
- yaml-cpp:一个C++的YAML解析库,用于读写YAML格式文件,可以在官网(https://github.com/jbeder/yaml-cpp)上下载。
基本使用方法
- 加载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;
}
- 存储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
- 读取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
- 存储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
- 读取嵌套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
- 存储嵌套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技术站