遍历所有布尔组合
iterate over all boolean combinations
在我想测试的函数中,我有 ~10 个布尔值,它通过一系列 if-else 等更改了我的函数的结果。我想自动运行所有可能的组合。我想做一个 std::vector,每个元素指向我的 10 个布尔值中的一个。现在有没有一种通用算法来遍历我的向量中布尔值的所有组合?
谢谢
不是真正的用户友好,发布这个只是为了好玩:
bool b[10];
for ( int i = 0 ; i < 1024 ; i++ )
{
for ( int j = 0 ; j < 10 ; j++ )
{
b[j] = i & (1 << j);
}
testFunction (b[0],....,b[9]);
}
假设你的函数有一个签名,比如
void f( bool b0, bool b1, bool b2 ... bool b9 );
您可以利用二进制算术:
void f( bool b0, bool b1, bool b2, bool b3, bool b4,
bool b5, bool b6, bool b7, bool b8, bool b9 );
int main()
{
for ( int i = 0; i < (1 << 10); ++i ) {
f( i & 0x001, i & 0x002, i & 0x004, i & 0x008, i & 0x010,
i & 0x020, i & 0x040, i & 0x080, i & 0x100, i & 0x200 );
}
}
这将调用f
1024 次,每次使用不同的布尔值组合。
您可以从 2^10 种组合中的每一个构造bitset<10>
:
for (int mask = 0 ; mask != (1<<10) ; mask++) {
bitset<10> bits(mask);
// At this point, bits[i] contains true of false
// for the combination of bits in mask.
}
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 一个关于在C++中重载布尔运算符的问题
- 提升精神:解析布尔表达式并简化为规范范式
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 混合组合和继承的C++问题
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 我需要将多个函数组合为一个函数
- 线程之间的布尔停止信号
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 布尔比较运算符是如何在C++中工作的
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 隐式常量/非常量运算符布尔
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 布尔组合数学 C++
- 遍历所有布尔组合
- 布尔值转换为字符串,并将boolalpha与一个方法组合在一起,而不是在打印时单独键入它