正确的是进行测量.
尽管如此,正如我记得的那样,有关位集的文档总是说有点集不能保证是真正的位,它只是对编译器的推荐和位操作的方便语法.
在嵌入式系统编译器中,许多使用真实的位集,因为在这种类型的程序中使用位是真正必需的.
至于速度,相反更合理 - 通过索引处理数组更简单.使用位需要更多的数学运算,访问正确的字然后访问正确的位.
您需要对您的用例进行基准测试。
bitset<N>是使用每元素位和array<bool, N>每元素字节,因此前者具有更高的变化以适应 L1d..LLd,因此对于关键大小的位掩码可能更快,至少在执行串行访问时bitset<N>进行更多数学运算,因此在某些访问模式(高度随机)下可能会更慢array<bool, N>每个元素的争用会更少,因此性能在很大程度上取决于访问模式。我通常uint64_t直接使用 -s 和编译器内在函数来扫描/计数。对于可以使用它的用例(好吧,用于跟踪最多 64 个东西),它击败了 OP 询问的两种替代方案。