c++可变宽度位域

C++ Variable Width Bit Field

本文关键字:位域 c++      更新时间:2023-10-16

我正在编写一个程序,该程序应该操作非常长的布尔值字符串。我最初将它们存储为unsigned long long int变量的动态数组,并对它们运行c风格的按位操作。

然而,我不希望因为必须迭代数组而带来的开销,即使处理器是在机器码级别上进行迭代的——也就是说,我相信编译器可能比我更有效。

所以,我想知道是否有一种方法可以将它们存储为位域。唯一的问题是,我听说你需要在运行时声明一个常数,让它工作,我不是特别关心这样做,因为我不知道,当程序开始时,我需要多少位。有办法做到这一点吗?

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

vector<bool>是向量的专门化,每个值只使用一个比特,而不是sizeof(bool),就像你可能期望的那样…虽然对内存使用有好处,但这个异常现在实际上不受标准机构的欢迎,因为(除其他外)vector<bool>不履行vector<T>所做的相同契约——它返回代理对象而不是引用,这在泛型代码中造成了严重破坏。