迭代所有可能的位排列

时间:2016-07-01 15:02:09

标签: c++ c++11 generator bit input-iterator

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

如何使用yield或装饰while循环等方式即时生成排列(如InputIterator的Python生成器)?

1 个答案:

答案 0 :(得分:3)

除非我误解,否则你可以使用一个int(无论如何都将它存储在它的核心位置),只是将你的循环绑定到迭代到空间允许的最宽的int(在这种情况下24位)。从0开始并添加连续的将隐式地逐步执行每个可能的位组合。

无需预先计算或存储任何内容。这是一个4位的例子:

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

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

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