我正在编写一个应该操作非常长的布尔值字符串的程序。我最初将它们存储为unsigned long long int
变量的动态数组,并对它们运行C风格的按位运算。
然而,即使处理器在机器代码级别进行迭代,我也不希望不得不迭代数组所带来的开销 - 即我相信编译器可能比我更有效率上午。
所以,我想知道是否有办法将它们存储为位域。唯一的问题是我听说你需要在运行时声明一个常量才能工作,我并不特别在意,因为我不知道程序启动时我需要多少位。有没有办法做到这一点?
答案 0 :(得分:0)
根据评论,std::bitset
或std::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
)
相同的合同 - 它返回代理对象而不是引用,这会在通用代码中造成严重破坏。