目标是将std::uint64_t
(用作位掩码)转换为std::array<bool>
。
此问题类似于C#问题How can I convert an int to an array of bool?,但对于C ++,我正在寻找具有最出色性能的算法。
给定一个用作位掩码的std::uint64_t
,我知道可以按位循环其内容,然后将值进行比较,将值设置为std::array<bool>
中相同位置的值。
但是在全能的C ++中,必须是一种更有效的方法!也许是一些肮脏的演员,malloc或其他?一切都好;我在Windows / GCC上,因此甚至完全允许使用仅GCC的功能。
答案 0 :(得分:6)
如果您只需要随机访问各个位,则可以使用std::bitset
代替std::array
。看起来像
uint64_t mask = some_value;
std::bitset<64> random_access(mask);
// and now you can use random_access[some_index]
std::bitset
确实缺少begin()
和end()
成员,因此您不能按原样将其与基于范围的for
循环一起使用。但是,您可以使用基于for的常规索引遍历std::bitset
,例如
for (size_t i = 0; i < random_access.size(); ++i)
std::cout << random_access[i] << "\n";