遍历所有可能的位排列

Iterating over all possible bit permutations

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

如何使用 InputIterator 或修饰的 while 循环即时生成排列(如 Python 生成器和 yield)?

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

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

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

在这种情况下,DoSomething(const unsigned long int&) 可以简单地映射位并执行您要查找的操作。

如果您的实现支持它,请使用 uint_32t 类型以获得明确且准确的宽度。