Конвертировать битовую маску uint64_t в std :: array of bool - PullRequest
0 голосов
/ 06 июля 2018

Цель состоит в том, чтобы преобразовать std::uint64_t (который используется в качестве битовой маски) в std::array<bool>.

Этот вопрос похож на вопрос C # Как я могу преобразовать int в массив bool? , но для C ++ и я ищу алгоритм с наилучшей производительностью .

Учитывая std::uint64_t, который используется в качестве битовой маски, я знаю, что можно просто циклически перебирать его содержимое и битовое сравнение устанавливать значения в те же позиции в std::array<bool>.

Но во всемогущем C ++ имеет , чтобы быть более эффективным способом! Может быть, какие-то грязные приведения, мальлоки или еще много чего? Все отлично; Я нахожусь на Windows / GCC, так что даже функции только GCC полностью разрешены.

1 Ответ

0 голосов
/ 06 июля 2018

Если вам просто нужен произвольный доступ к отдельным битам, вы можете использовать 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";
...