C++中vector数据持久化有文本、二进制和序列化三种主要方式:1. 文本文件适合基本类型,读写直观;2. 二进制文件高效紧凑,适用于数值类型,需注意大小端问题;3. JSON等序列化库支持复杂结构,跨平台易读,推荐nlohmann/json处理vector<string>或自定义类型。

在C++中,将
vector的内容写入文件(即数据持久化)有多种方式,具体取决于你存储的数据类型以及是否需要保留类型信息。下面介绍几种常用且实用的方法。
1. 写入文本文件(适合基本类型)
如果
vector中存储的是
int、
double、
string等可输出类型,可以使用
<fstream>将其以文本形式写入文件。 示例:将 vector<int> 写入文本文件
#include <fstream>
#include <vector>
#include <iostream>
<p>std::vector<int> data = {1, 2, 3, 4, 5};
std::ofstream file("data.txt");
if (file.is_open()) {
for (const auto& item : data) {
file << item << "\n";
}
file.close();
}
读取时逐行解析即可:
std::vector<int> loaded;
std::ifstream infile("data.txt");
int value;
while (infile >> value) {
loaded.push_back(value);
}
2. 二进制写入(高效,适合数值类型)
对于
vector<int>、
vector<double>等连续内存的POD类型,可以直接用
write()方法写入二进制文件,速度快,体积小。
立即学习“C++免费学习笔记(深入)”;
示例:vector<double> 二进制写入std::vector<double> values = {1.1, 2.2, 3.3, 4.4};
std::ofstream file("data.bin", std::ios::binary);
size_t size = values.size();
file.write(reinterpret_cast<const char*>(&size), sizeof(size));
file.write(reinterpret_cast<const char*>(values.data()), values.size() * sizeof(double));
file.close();
读取时按相同格式还原:
std::vector<double> loaded;
std::ifstream infile("data.bin", std::ios::binary);
size_t size;
infile.read(reinterpret_cast<char*>(&size), sizeof(size));
loaded.resize(size);
infile.read(reinterpret_cast<char*>(loaded.data()), size * sizeof(double));
3. 使用序列化库(如 JSON 或 XML)
若需跨平台、易读或存储复杂结构(如
vector<Person>),推荐使用序列化格式。例如使用 nlohmann/json 库处理 JSON。 示例:用 JSON 存储 vector<string>
#include <nlohmann/json.hpp>
#include <fstream>
<p>std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
nlohmann::json j = names;</p><p>std::ofstream file("names.json");
file << j.dump(4); // 格式化输出
读取也很简单:
std::ifstream infile("names.json");
nlohmann::json j;
infile >> j;
std::vector<std::string> loaded = j.get<std::vector<std::string>>();
4. 自定义结构体的持久化
如果
vector中是自定义类型,建议重载输入输出操作符或手动序列化字段。 示例:保存 vector<Point>
struct Point {
double x, y;
};
<p>// 手动序列化为文本
std::ofstream file("points.txt");
for (const auto& p : points) {
file << p.x << " " << p.y << "\n";
}
或扩展 JSON 方法支持结构体(需定义 to_json/from_json 函数)。
基本上就这些。选择哪种方式取决于你的需求:调试用文本,性能用二进制,通用性用JSON。关键是读写格式要一致,注意字节序和类型对齐问题(尤其在跨平台时)。











