2

テストしたい関数では、ブール値が10個まであり、一連のif-elseなどによって関数の結果が変わります。可能なすべての組み合わせを自動的に実行したいと思います。std :: vectorを実行することを考えています。各要素は、私の10個のブール値の1つを指しています。これで、ベクトル内のブール値のすべての組み合わせを反復処理する一般的なアルゴリズムはありますか?

ありがとう

4

3 に答える 3

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]);
}
于 2012-06-06T09:26:47.013 に答える
4

関数に次のようなシグネチャがあると仮定します

void f( bool b0, bool b1, bool b2 ... bool b9 );

2進演算を利用できます。

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回呼び出します。

于 2012-06-06T09:37:27.087 に答える
2

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.
}
于 2012-06-06T09:37:33.680 に答える