迭代所有布尔组合

时间:2012-06-06 09:23:48

标签: c++ testing

在我要测试的函数中我有~10个布尔值,它通过一系列if-else改变我的函数的结果等。 我想自动运行所有可能的组合。我想做一个std :: vector,每个元素指向我的10个布尔值中的一个。 现在是否有一个通用的算法来迭代我的向量中的bool值的所有组合?

感谢

3 个答案:

答案 0 :(得分:6)

不是真的用户友好,发布这只是为了好玩:

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]);
}

答案 1 :(得分:4)

假设您的功能具有类似

的签名
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 :(得分:2)

您可以从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.
}