C++ 可变宽度位域

C++ Variable Width Bit Field

我正在编写一个程序,用于处理很长的布尔值字符串。我最初将它们存储为 unsigned long long int 变量的动态数组,并对它们进行 运行 C 风格的按位运算。

但是,我不希望迭代数组所带来的开销,即使处理器在机器代码级别执行它也是如此——也就是说,我相信编译器可能比我更高效上午

所以,我想知道是否有办法将它们存储为位域。唯一的问题是,我听说您需要在运行时声明一个常量才能正常工作,但我并不特别关心这样做,因为我不知道程序启动时我需要多少位。有办法吗?

根据评论,std::bitsetstd::vector<bool> 可能是您所需要的。 bitset是固定长度,vector<bool>是动态的。

vector<bool> 是 vector 的一种特殊化,每个值只使用一位,而不是 sizeof(bool),就像您可能期望的那样......虽然有利于内存使用,但实际上不喜欢此异常这些天的标准机构,因为(除其他外)vector<bool> 不履行与 vector<T> 相同的合同 - 它 returns 代理对象而不是引用,这在通用代码中造成严重破坏.