C ++可变宽度位域

时间:2015-09-14 06:54:32

标签: c++ bit-fields

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

然而,即使处理器在机器代码级别进行迭代,我也不希望不得不迭代数组所带来的开销 - 即我相信编译器可能比我更有效率上午。

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

1 个答案:

答案 0 :(得分:0)

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

vector<bool>是向量的特化,每个值只使用一位而不是sizeof(bool),就像你期望的那样......虽然对内存使用有好处,但这个例外实际上不受标准的影响这些天,因为vector<bool> vector<T>不履行与CREATE TABLE main_table( id integer NOT NULL, //some fields ) CREATE TABLE test( id integer NOT NULL, name varchar, CONSTRAINT test_pk PRIMARAY KEY (id), CONSTRAINT test_fk FOREIGN KEY (fk_id) REFERENCES main_table (id) MATCH SIMPLE ) 相同的合同 - 它返回代理对象而不是引用,这会在通用代码中造成严重破坏。