c++ - 如何序列化/反序列化 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 实现允许将布尔值打包成单个位。因此,上述方法在技术上不会始终如一地工作,因为未指定数据在内存中的精确布局方式。
有什么方法可以序列化/反序列化我的布尔向量而无需打包/解包数据?
解决方案
我认为您最好将该向量转换为std::vector<std::byte>
/ std::vector<unsigned char>
。
std::vector<bool>
甚至不需要有连续的内存,所以从data()
实现开始写入也是定义的。
推荐阅读
- javascript - Javascript数组显示不是数组错误
- android - 位于imageview Android下方中心的Textview
- javascript - How to get last 3 weeks date range using moment ?
- sql-server - Moving the "model" SQL Server database on an Azure VM prevents service startup
- angular - Angular 4中选择下拉列表末尾的滚动事件
- python - 没有名为“Mahotas”的模块
- performance - How does BUNDLE help to improve webRTC connection/performance? By how much roughly?
- jhipster - How to add a scroll top button in jhipster?
- raspberry-pi - 使用 rtsp 从 pi 零广播视频流
- python-2.7 - TypeError: super() 在 python 2 和 python 3 中至少需要 1 个参数(给定 0)