在布尔值上循环

Loop over a Boolean

本文关键字:循环 布尔值      更新时间:2023-10-16

可能重复:
如何在布尔值(false和true(上编写"for"循环

我想执行两次相同的任务,bool flag第一次为true,第二次为false。有没有一种优雅的方法可以做到这一点(也许可以使用循环(?

我的想法是做如下的事情,但这太复杂了。

bool flag = true;
for(int i = 0; i < 2; ++i, flag = !flag)
{
    // ...
}

将其放入函数中,以flag为参数。调用该函数两次。

由于您在Thomas的回答中说过必须向函数传递大量参数,因此考虑lambda:

int param1;
bool param2;
...
auto doWork = [&](bool flag){ //<- capture all local variables by reference
    ... do work with params ...
};
doWork(true);
doWork(false);

通过这种方式,您可以封装工作代码,不必乏味地传递任何参数,而且仍然可以明显地看到您调用了两次代码。

我发现了一个使用do-while循环的好方法。

bool flag = false;
do
{
    // ...
    flag = !flag;
}
while(flag)

由于do-while循环中的代码至少执行一次,所以我可以在最后切换标志,只运行两次。

在函数中调用它的解决方案可能是最好的,但您也可以这样做:

for( int i = 0; i < 2; ++i ) {
    bool flag = i == 0;
    ...