迭代所有可能的位排列
Iterating over all possible bit permutations
假设我想遍历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类型明确和准确的宽度。
相关文章:
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 有可能使shared_ptr协变吗
- 有可能在信号处理程序中设置promise吗
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 是否有可能使用debug_info获取ELF文件的源代码?
- C++,是否有可能/如何定义在.h和.cpp源文件中调用函数的类构造函数
- 有可能在C++中有类的查找表吗
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 向量的大小是否有可能为 1 但其中的元素数量为零?
- 是否有可能编写新的叮当声现代化规则?
- 是否有可能通过指向另一个未关联的子对象的指针来获取指向一个子对象的指针?
- 是否有可能通过演绎指南实现整个 std::make_tuple 功能?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 是否有可能具有放入容器的移动操作的类型?
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 声明是否有可能逃脱其封闭的名称空间
- git-是否有互联网上某处所有可能错误的列表
- 是否有可能有一个派生类继承最终函数但创建相同的函数(而不是重写)