我需要能够在c ++中存储一个二进制数组,它将通过不同的方法传递并最终输出到文件和终端,
向量和位集之间的主要区别是什么?使用起来最简单和/或更高效?
(我不知道需要存储多少位)
答案 0 :(得分:1)
std::bitset
大小应该在编译时知道,因此您的选择很明显 - 使用std::vector<bool>
。
由于它的实现与std::vector<char>
不同(因为单个元素需要一点,而不是一个完整的char),因此在内存使用方面应该是一个很好的解决方案。
答案 1 :(得分:1)
这完全取决于你想要做什么二进制文件。
您也可以使用boost.dynamic_bitset std::bitset
,但不能使用固定位。
如果您还没有使用它,那么主要的缺点就是依赖于提升。
您还可以将输入存储在std::vector<char>
中,并使用每char
的位集来转换二进制表示法。
正如其他人已经说过的那样:std::bitset
使用固定数量的位。
std::vector<bool>
并不总是被建议,因为它有它的怪癖,因为它不是一个真正的容器(gotw)。
答案 2 :(得分:0)
如果您不知道在编译时需要存储多少位,则不能使用bitset,因为它的大小是固定的。因此,您应该vector<bool>
,因为它可以动态调整大小。如果你想要像这样保存一个比特数组,你可以使用vector< vector<bool> >
。
答案 3 :(得分:0)
我认为在您的情况下,您应该使用std::vector
,其值类型为std::bitset
。使用这种方法,您可以将“二进制数”视为字符串或类似某些整数类型的对象,同时可以轻松进行二进制操作,如设置或重置位。
答案 4 :(得分:0)
如果您需要存储的数字大小没有任何特定上限,则需要将数据存储在两个不同的维度中:
对于后者,如果要求您的值在内存中连续,则使用std:vector
就可以了。对于数字本身,您根本不需要任何数据结构:只使用new
和无符号基本类型(如unsigned char
,uint8_t
或任何其他类型(如果您有对齐约束)分配内存
另一方面,如果您知道您的数字不会超过64位,那么请使用您知道将保存此数据量的数据类型,例如uint64_t
。
PS:记住你存储的是数字。无论您是使用它们还是使用任何其他表示形式,计算机都会将它们存储为二进制文件。