如何从文件读取信息到vector <bool>?</bool>

时间:2015-03-30 12:57:02

标签: c++ vector bits

我想使用vector<bool>来存储二进制数据(0/1)。

我无法找到一种正确的方法从填充二进制数据的文件读取到向量,以便每个单元格包含1位。

更重要的是,有没有办法从矢量中接近一系列值? 例如,在单个命令中写入1-20位。

2 个答案:

答案 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_backdynamic_bitset使用append等。