Скажем, я хочу перебрать все битовые последовательности (из-за отсутствия лучшего имени) в диапазоне 0000
—1111
, Когда я хочу увеличить его до 24 бит, я не смогу просто заранее вычислить все возможные перестановки; Мне нужно вычислить их на лету.
Как я могу генерировать перестановки на лету (как генераторы Python с yield
) используя что-то вроде InputIterator
или украшенная в то время петля?
Если я не неправильно понимаю, вы можете использовать int (который в любом случае хранится в виде битов в его ядре), просто ограничить ваш цикл только для итерации до самого широкого int, который допускает пространство (в нашем случае 24 бита). Начиная с 0 и добавляя последовательные, неявно будут проходить все возможные битовые комбинации.
Не нужно ничего предварительно вычислять или хранить. Вот 4-битный пример:
for(unsigned long int cnt = 0; cnt < 16; cnt++) DoSomething(cnt);
В этом случае DoSomething (const unsigned long int&) может просто отобразить биты и выполнить действие, которое вы ищете.
Если ваша реализация поддерживает это, используйте тип uint_32t для явной и точной ширины.
Других решений пока нет …