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

nad*_*ada 0 c++ arrays performance gcc stdarray

目标是将a std::uint64_t(用作位掩码)转换为a std::array<bool>.

这个问题类似于C#问题如何将int转换为bool数组?,但对于C++而言,我正在寻找具有最佳性能的算法.

给定a std::uint64_t,用作位掩码,我知道可以按位循环遍历其内容,并将bitcompare值设置为位于相同位置的值std::array<bool>.

但是在全能的C++ 必须有一种更有效的方式!也许一些肮脏的演员,mallocs或诸如此类的东西?一切都好; 我在Windows/GCC上,所以即使是仅GCC功能也是完全允许的.

Nat*_*ica 6

如果您只需要随机访问各个位,则可以使用a std::bitset而不是a std::array.那看起来像

uint64_t mask = some_value;
std::bitset<64> random_access(mask);

// and now you can use random_access[some_index]
Run Code Online (Sandbox Code Playgroud)

std::bitset确实缺乏begin()end()成员,所以你不能使用基于范围的for循环原样.但是,您可以std::bitset使用基于循环的常规索引来迭代a

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

  • @nada对不起,有时候C++会给你你想要的东西;) (3认同)