Самый эффективный способ изменить значение диапазона битов в std::bitset
Мне нужен эффективный метод с низкой сложностью для изменения значений диапазона битов в наборе битов:
bitset<1000000> bs;
и мне нужно установить значения от 100 до 500, например, TRUE.
Какой самый быстрый способ сделать это при минимальной сложности?
Использование цикла не будет достаточно точно.
1 ответ
Обычный цикл for- это самый простой и быстрый способ:
std::bitset<1000000> bs;
for (unsigned i = start, stop = start + n; i != stop; ++i)
bs.set(i);
К несчастью:
- учитывая размер
bs
работать с масками / смещением не вариант (например, см. в битах, могу ли я использовать "to_ulong" для определенного диапазона битов?) - интерфейс
bitset
не поддерживает диапазоны / подблоки (например, какова производительность std:: bitset?). Такое же ограничение присутствует в boost:: dynamic_bitset.
Также учтите, что std::bitset
не поставляется с итераторами, поэтому его нельзя использовать с функциями в <algorithm>
библиотека.
Если производительность действительно имеет значение, вы можете подумать о специальной реализации.