在我想测试的函数中,我有大约 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 次,每次都使用不同的布尔值组合。
您可以bitset<10>
从 2^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.
}