首页 > 解决方案 > 如何序列化/反序列化 std::vector最有效?

问题描述

我正在尝试将 a 的内容写入std::vector<bool>磁盘到二进制文件中。由于write()许多 STL 输出流的方法接受指向数组本身的指针,以及要写入的字节数,对于“正常”向量,我最终会做这样的事情:

std::vector<unsigned int> dataVector = {0, 1, 2, 3, 4};
std::fstream outStream = std::fstream("vectordump.bin", std::ios::out | std::ios::binary);
outStream.write((char*) dataVector.data(), dataVector.size() * sizeof(unsigned int));
outStream.close();

但是,这std::vector<bool>是一种特殊情况,因为 STL 实现允许将布尔值打包成单个位。因此,上述方法在技术上不会始终如一地工作,因为未指定数据在内存中的精确布局方式。

有什么方法可以序列化/反序列化我的布尔向量而无需打包/解包数据?

标签: c++c++11stl

解决方案


我认为您最好将该向量转换为std::vector<std::byte>/ std::vector<unsigned char>

std::vector<bool>甚至不需要有连续的内存,所以从data()实现开始写入也是定义的。


推荐阅读