以下是将 vector 对象序列化为二进制文件的 C++ 代码示例:

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

struct MyData {
    int id;
    string name;
    double score;
};

// 将 vector 对象序列化为二进制文件
void serialize(const vector<MyData>& data, const string& filename) {
    ofstream ofs(filename, ios::binary);
    if (ofs) {
        int size = data.size(); // 获取 vector 对象的大小
        ofs.write(reinterpret_cast<const char*>(&size), sizeof(size)); // 写入 vector 对象的大小
        for (const auto& d : data) {
            ofs.write(reinterpret_cast<const char*>(&d.id), sizeof(d.id)); // 写入 id
            int len = d.name.size(); // 获取 name 字符串的长度
            ofs.write(reinterpret_cast<const char*>(&len), sizeof(len)); // 写入 name 字符串的长度
            ofs.write(d.name.data(), len); // 写入 name 字符串的内容
            ofs.write(reinterpret_cast<const char*>(&d.score), sizeof(d.score)); // 写入 score
        }
    }
    ofs.close();
}

// 从二进制文件中反序列化出 vector 对象
vector<MyData> deserialize(const string& filename) {
    vector<MyData> data;
    ifstream ifs(filename, ios::binary);
    if (ifs) {
        int size;
        ifs.read(reinterpret_cast<char*>(&size), sizeof(size)); // 读取 vector 对象的大小
        for (int i = 0; i < size; ++i) {
            MyData d;
            ifs.read(reinterpret_cast<char*>(&d.id), sizeof(d.id)); // 读取 id
            int len;
            ifs.read(reinterpret_cast<char*>(&len), sizeof(len)); // 读取 name 字符串的长度
            d.name.resize(len); // 为 name 字符串分配空间
            ifs.read(&d.name[0], len); // 读取 name 字符串的内容
            ifs.read(reinterpret_cast<char*>(&d.score), sizeof(d.score)); // 读取 score
            data.push_back(d);
        }
    }
    ifs.close();
    return data;
}

int main() {
    vector<MyData> data = { {1, 'Alice', 90.5}, {2, 'Bob', 85.0}, {3, 'Charlie', 70.5} };
    serialize(data, 'data.bin');
    vector<MyData> loaded_data = deserialize('data.bin');
    for (const auto& d : loaded_data) {
        cout << d.id << ' ' << d.name << ' ' << d.score << endl;
    }
    return 0;
}

该代码使用 ofstream 和 ifstream 类分别实现了将 vector 对象序列化为二进制文件和从二进制文件中反序列化出 vector 对象的功能。在序列化时,我们首先将 vector 对象的大小写入文件,然后逐个写入 vector 中的元素。对于 MyData 结构体中的字符串 name,我们先写入它的长度,然后再写入它的内容。在反序列化时,我们先读取 vector 对象的大小,然后逐个读取 vector 中的元素。对于字符串 name,我们先读取它的长度,然后为它分配空间,再读取它的内容。最后,我们将反序列化出的 vector 对象输出到控制台上。

通过以上代码,你可以轻松实现将 vector 对象序列化为二进制文件,并从文件中恢复数据。这在数据存储、网络传输等场景中非常有用。

C++ 将 vector 对象序列化为二进制文件

原文地址: https://www.cveoy.top/t/topic/l2TE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录