答案:C++中序列化std::vector到文件的常见方法包括二进制写入(适用于POD类型,高效但不支持复杂对象)、文本存储(可读性强但效率低)、Boost.Serialization(通用,支持复杂类型和STL容器)以及JSON或MessagePack(跨语言兼容,适合配置数据)。根据数据类型、性能需求和可读性选择合适方式。

在C++中,将std::vector序列化到文件的常见方法有多种,包括使用二进制写入、文本存储、以及借助第三方库如Boost.Serialization。下面介绍几种实用且高效的方法。
如果std::vector中存储的是基本数据类型(如int、float、double等),可以直接以二进制形式写入文件。
#include <fstream>
#include <vector>
<p>void saveVectorBinary(const std::vector<double>& vec, const std::string& filename) {
std::ofstream file(filename, std::ios::binary);
if (!file) return;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">// 先写入大小
size_t size = vec.size();
file.write(reinterpret_cast<const char*>(&size), sizeof(size));
// 再写入数据
file.write(reinterpret_cast<const char*>(vec.data()), size * sizeof(double));}
void loadVectorBinary(std::vector<double>& vec, const std::string& filename) { std::ifstream file(filename, std::ios::binary); if (!file) return;
size_t size; file.read(reinterpret_cast<char*>(&size), sizeof(size)); vec.resize(size); file.read(reinterpret_cast<char*>(vec.data()), size * sizeof(double));
}
注意:这种方法仅适用于POD(Plain Old Data)类型,不能用于包含指针或复杂对象(如std::string)的vector。
立即学习“C++免费学习笔记(深入)”;
将vector元素逐个以文本形式写入文件,适合需要可读性的场景。
#include <fstream>
#include <vector>
<p>void saveVectorText(const std::vector<int>& vec, const std::string& filename) {
std::ofstream file(filename);
if (!file) return;
for (const auto& val : vec) {
file << val << "\n";
}
}</p><p>void loadVectorText(std::vector<int>& vec, const std::string& filename) {
std::ifstream file(filename);
if (!file) return;
int val;
vec.clear();
while (file >> val) {
vec.push_back(val);
}
}
优点:可读性强,易于调试;缺点:效率较低,占用空间大。
Boost提供了一套完整的序列化机制,支持复杂类型、STL容器等。
需先安装Boost并包含头文件:#include <boost/serialization/vector.hpp>
#include <boost/serialization/string.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <fstream>
<p>template<typename T>
void saveVector(const std::vector<T>& vec, const std::string& filename) {
std::ofstream file(filename);
boost::archive::text_oarchive oa(file);
oa << vec;
}</p><p>template<typename T>
void loadVector(std::vector<T>& vec, const std::string& filename) {
std::ifstream file(filename);
boost::archive::text_iarchive ia(file);
ia >> vec;
}
说明:支持自定义类型,只需为类实现序列化方法。也可使用binary_oarchive提升性能。
借助nlohmann/json等库,可将vector转为JSON格式存储。
#include <nlohmann/json.hpp>
#include <fstream>
<p>using json = nlohmann::json;</p><p>void saveVectorJson(const std::vector<double>& vec, const std::string& filename) {
json j = vec;
std::ofstream file(filename);
file << j.dump(4); // 格式化输出
}</p><p>void loadVectorJson(std::vector<double>& vec, const std::string& filename) {
std::ifstream file(filename);
json j;
file >> j;
vec = j.get<std::vector<double>>();
}
优点:跨语言兼容,结构清晰;推荐:适合配置或小型数据存储。
基本上就这些常用方法。根据数据类型、性能要求和可读性需求选择合适的方式即可。
以上就是c++++中如何序列化vector到文件_c++ vector序列化存储方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号