У меня есть функция прирастить битовый следующий образом:Как перебрать все бистроны с одним 0, двумя 0 с, вплоть до n 0s?
void increment(boost::dynamic_bitset<> &bitset)
{
for (int loop = 0; loop < bitset.size(); ++loop)
{
if ((bitset[loop] ^= 0x1) == 0x1)
{
break;
}
}
}
Я хочу функцию, которая вызывается тем же способом, как прирост будет называться, но изменяет битовую по-разному. Каждый раз, когда он вызывается, я хочу получить следующую битструю с тем же числом 0, что и предыдущий.
Например, если битстрона имеет длину 10, первые 10 вызовов этой функции будут давать битструю с одним 0. Затем вызовы с 11 по 20 возвратят битстроны с 2 0. Я хочу, чтобы это продолжалось до тех пор, пока битстрона не будет равна 0s.
Как я могу настроить такую функцию? Благодаря!
Похож на проблему XY –
Если ваша строка имеет длину 10, вы можете просто перебрать интегральный диапазон '[0, 1 << 10)' и использовать эти целые числа. –
@SethCarnegie Хорошо, разъяснение по проблеме :) Я представляю набор больших объектов битовой строкой и хочу сделать несколько тестов для всех подмножеств этой битовой строки. Тем не менее, я знаю, что подмножества, которые меня интересуют, обычно содержат только несколько элементов из набора, поэтому я хочу сгенерировать все подмножества, начиная с только одного элемента, удаленного и работающего вниз. – Jim