C++ 迭代所有布尔组合

C++ 迭代所有布尔组合,c++,testing,C++,Testing,在我要测试的一个函数中,我有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]

在我要测试的一个函数中,我有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]);
}
bool b[10];
对于(int i=0;i<1024;i++)
{
对于(int j=0;j<10;j++)
{

b[j]=i&(1假设你的函数有一个像

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 );
    }
}
void f(bool b0、bool b1、bool b2、bool b3、bool b4、,
bool b5、bool b6、bool b7、bool b8、bool b9);
int main()
{
对于(int i=0;i<(1),您可以从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.
}

for(int-mask=0;mask!=(1帮你自己一个忙:编写单独的测试…一个有十个布尔参数和一堆if-else的函数?你确定不能用更干净的设计(例如)重构它吗?我想我实际上只有5个布尔值。基本上,这是一个将不同的SQL查询片段附加到另一个SQL查询的函数,我想测试所有组合的查询是否正确(其语法)相同的原则,更加用户友好:) +1@Frerich我们正在使用函数,但没有保存结果,有没有办法也保存结果?@user2754673我不明白这个问题;我画的函数没有结果。是的。你没有。你只是在迭代所有可能的真值表结构。如何生成结果也是我的问题。@user2754673你会生成结果吗通过适当地定义
f
,您可以收集数据结构中
f
的返回值,例如
std::vector
。您的问题太笼统了,无法真正说明具体内容。+1考虑
std::bitset
,可以避免使用二进制运算符测试位。