C++ 可变宽度位域
C++ Variable Width Bit Field
我正在编写一个程序,用于处理很长的布尔值字符串。我最初将它们存储为 unsigned long long int
变量的动态数组,并对它们进行 运行 C 风格的按位运算。
但是,我不希望迭代数组所带来的开销,即使处理器在机器代码级别执行它也是如此——也就是说,我相信编译器可能比我更高效上午
所以,我想知道是否有办法将它们存储为位域。唯一的问题是,我听说您需要在运行时声明一个常量才能正常工作,但我并不特别关心这样做,因为我不知道程序启动时我需要多少位。有办法吗?
根据评论,std::bitset
或 std::vector<bool>
可能是您所需要的。 bitset
是固定长度,vector<bool>
是动态的。
vector<bool>
是 vector 的一种特殊化,每个值只使用一位,而不是 sizeof(bool)
,就像您可能期望的那样......虽然有利于内存使用,但实际上不喜欢此异常这些天的标准机构,因为(除其他外)vector<bool>
不履行与 vector<T>
相同的合同 - 它 returns 代理对象而不是引用,这在通用代码中造成严重破坏.
我正在编写一个程序,用于处理很长的布尔值字符串。我最初将它们存储为 unsigned long long int
变量的动态数组,并对它们进行 运行 C 风格的按位运算。
但是,我不希望迭代数组所带来的开销,即使处理器在机器代码级别执行它也是如此——也就是说,我相信编译器可能比我更高效上午
所以,我想知道是否有办法将它们存储为位域。唯一的问题是,我听说您需要在运行时声明一个常量才能正常工作,但我并不特别关心这样做,因为我不知道程序启动时我需要多少位。有办法吗?
根据评论,std::bitset
或 std::vector<bool>
可能是您所需要的。 bitset
是固定长度,vector<bool>
是动态的。
vector<bool>
是 vector 的一种特殊化,每个值只使用一位,而不是 sizeof(bool)
,就像您可能期望的那样......虽然有利于内存使用,但实际上不喜欢此异常这些天的标准机构,因为(除其他外)vector<bool>
不履行与 vector<T>
相同的合同 - 它 returns 代理对象而不是引用,这在通用代码中造成严重破坏.