我应该使用位集还是向量? C ++

时间:2016-11-22 15:42:52

标签: c++ vector bitset

我需要能够在c ++中存储一个二进制数组,它将通过不同的方法传递并最终输出到文件和终端,

向量和位集之间的主要区别是什么?使用起来最简单和/或更高效?

(我不知道需要存储多少位)

5 个答案:

答案 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 charuint8_t或任何其他类型(如果您有对齐约束)分配内存

另一方面,如果您知道您的数字不会超过64位,那么请使用您知道将保存此数据量的数据类型,例如uint64_t

PS:记住你存储的是数字。无论您是使用它们还是使用任何其他表示形式,计算机都会将它们存储为二进制文件。

相关问题