我想使用vector<bool>
来存储二进制数据(0/1)。
我无法找到一种正确的方法从填充二进制数据的文件读取到向量,以便每个单元格包含1位。
更重要的是,有没有办法从矢量中接近一系列值? 例如,在单个命令中写入1-20位。
答案 0 :(得分:2)
这回答了你的直接问题。
std::vector<bool> whole_data;
std::ifstream file("myfile", std::ios::binary);
char data;
while (file.read(&data, 1))
{
for (int i = 0; i < CHAR_BIT; i++)
{
whole_data.push_back(((data >> i) & 1) != 0);
}
}
但是,请考虑是否需要立即将整个文件读入内存(如果它很大,该怎么办?)。此外,我还没有评论vector<bool>
是否是此处使用的最佳数据结构。我不知道你将如何处理它。
答案 1 :(得分:1)
不能保证vector<bool>
是一个实际的位向量 - 允许实现为它专门化vector<>
,但不是必需的。如果它的性能有所改善,那就值得商榷,这就是为什么bool
在大多数平台上都是单词别名(与OS字大小相同)的原因。
您可以使用具有这些保证的boost::dynamic_bitset
。或者任意数量的其他bitset实现。
关于如何添加值,请阅读您选择使用的手册。 vector<>
使用push_back
,dynamic_bitset
使用append
等。