将uint64_t Bitmask转换为bool的std :: array

时间:2018-07-06 13:37:08

标签: c++ arrays performance gcc stdarray

目标是将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的功能。

1 个答案:

答案 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";