c++可变宽度位域
C++ Variable Width Bit Field
我正在编写一个程序,该程序应该操作非常长的布尔值字符串。我最初将它们存储为unsigned long long int
变量的动态数组,并对它们运行c风格的按位操作。
然而,我不希望因为必须迭代数组而带来的开销,即使处理器是在机器码级别上进行迭代的——也就是说,我相信编译器可能比我更有效。
所以,我想知道是否有一种方法可以将它们存储为位域。唯一的问题是,我听说你需要在运行时声明一个常数,让它工作,我不是特别关心这样做,因为我不知道,当程序开始时,我需要多少位。有办法做到这一点吗?
根据评论,std::bitset
或std::vector<bool>
可能是您需要的。bitset
为定长,vector<bool>
为动态。
vector<bool>
是向量的专门化,每个值只使用一个比特,而不是sizeof(bool)
,就像你可能期望的那样…虽然对内存使用有好处,但这个异常现在实际上不受标准机构的欢迎,因为(除其他外)vector<bool>
不履行vector<T>
所做的相同契约——它返回代理对象而不是引用,这在泛型代码中造成了严重破坏。
相关文章:
- C++Union/Struct位域的实现和可移植性
- 具有位域的结构的 Constexpr 构造函数
- 如何解释 #if/#else 位域?(VC++菜鸟)
- 枚举位域和聚合初始化
- 在有符号基础类型枚举的位域上溢出
- 如何检查位域是否跨越所有位
- 访问位域联合是C++标准中常见的初始数据未定义行为
- 锈迹位域和枚举C++样式
- C/C++:uint8_t位域的行为不正确且不一致
- 如何将位域写入二进制文件
- 字节序和大小为 1 的位域
- 面向对象编程 - 位域私有结构的公共参考
- 使用位域的结构大小不正确
- 在 mingw 的 gcc-5.3 下具有混合位域和枚举递减的结构的意外大小
- 如何将位域成员的所有位设置为 1
- 带有 C++ 位域的匿名 typedef 的前向声明
- 通过套接字C++发送时,位域值会更改
- 有符号的 int 会中断较大位域的某些部分
- 位域.为什么没有输出
- 忽略注意:在不使用"-Wno-packed-bitfield-compat"的情况下对打包位域进行偏移