首页 > 后端开发 > C++ > 正文

c++中如何序列化vector到文件_c++ vector序列化存储方法

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

c++中如何序列化vector到文件_c++ vector序列化存储方法

在C++中,将std::vector序列化到文件的常见方法有多种,包括使用二进制写入、文本存储、以及借助第三方库如Boost.Serialization。下面介绍几种实用且高效的方法。

1. 二进制方式直接写入(适用于POD类型)

如果std::vector中存储的是基本数据类型(如intfloatdouble等),可以直接以二进制形式写入文件。

示例代码:

#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++免费学习笔记(深入)”;

2. 文本方式存储(便于调试和跨平台)

将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);
}
}
登录后复制

优点:可读性强,易于调试;缺点:效率较低,占用空间大。

序列猴子开放平台
序列猴子开放平台

具有长序列、多模态、单模型、大数据等特点的超大规模语言模型

序列猴子开放平台 0
查看详情 序列猴子开放平台

3. 使用Boost.Serialization(通用且强大)

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提升性能。

4. 使用JSON或MessagePack(现代轻量方案)

借助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++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号