将 uint64_t 位掩码转换为布尔值的 std::array

Convert uint64_t Bitmask to std::array of bool

objective是将std::uint64_t(用作位掩码)转换为std::array<bool>

此问题类似于 C# 问题 How can I convert an int to an array of bool?,但对于 C++,我正在寻找具有 最佳性能.

的算法

给定一个用作位掩码的 std::uint64_t,我知道可以按位遍历其内容并进行位比较,将值设置为 [=13= 中相同位置的值].

但是在全能的 C++ 中 是一种更有效的方法!也许是一些肮脏的演员表、mallocs 或诸如此类的东西?一切都好;我在 Windows/GCC,所以即使只有 GCC 的功能也是完全允许的。

如果您只需要随机访问各个位,您可以使用 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 循环一起使用。但是,您可以使用基于循环的常规索引迭代 std::bitset,例如

for (size_t i = 0; i < random_access.size(); ++i)
    std::cout << random_access[i] << "\n";