我正在尝试将 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();
Run Code Online (Sandbox Code Playgroud)
但是,这std::vector<bool>是一种特殊情况,因为允许 STL 实现将布尔值打包成单个位。因此,上述方法在技术上不会始终有效,因为未指定数据在内存中的精确布局方式。
有没有什么方法可以序列化/反序列化我的 bool 向量而不必打包/解包数据?
Som*_*ken 10
我认为您最好将该向量转换为std::vector<std::byte>/ std::vector<unsigned char>。
std::vector<bool>甚至不需要有连续的内存,所以从data()实现开始编写也是定义的。