迭代所有可能的位排列

Iterating over all possible bit permutations

本文关键字:排列 有可能 迭代      更新时间:2023-10-16

假设我想遍历0000 - 1111范围内的所有位序列(由于缺乏更好的名称)。当我想将其扩展到24位时,我无法事先简单地计算所有可能的排列;我需要动态地计算它们

我如何使用InputIterator或装饰while循环之类的东西动态生成排列(如Python生成器与yield) ?

除非我误解了,否则您可以使用int(无论如何在其核心存储为位),只需将循环绑定为只迭代到空间允许的最宽的int(在本例中为24位)。从0开始并添加连续的数字将隐式地遍历每个可能的位组合。

不需要预先计算或存储任何东西。下面是一个4位的例子:

for(unsigned long int cnt = 0; cnt < 16; cnt++) DoSomething(cnt);

在这种情况下DoSomething(const unsigned long int&)可以简单地映射比特并执行您正在寻找的操作。

如果你的实现支持它,使用uint_32t类型明确和准确的宽度。