2

可能重复:
如何在布尔值(假和真)上编写“for”循环

我想两次执行相同的任务,第一次为bool flag真,第二次为假。有没有一种优雅的方式来做到这一点(也许使用循环)?

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

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

4 回答 4

5

把它放在一个函数中,flag作为一个参数。调用该函数两次。

于 2012-12-26T12:52:03.753 回答
4

既然您说您必须在 Thomas 的回答中将很多参数传递给函数,请考虑使用 lambda:

int param1;
bool param2;
...

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

doWork(true);
doWork(false);

这样您就可以封装您的工作代码,不必繁琐地传递任何参数,并且仍然可以清楚地看到您调用了两次代码。

于 2012-12-26T15:19:04.003 回答
3

我想出了一个使用 do-while-loop 的好方法。

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

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

于 2012-12-26T13:12:50.243 回答
2

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

for( int i = 0; i < 2; ++i ) {
    bool flag = i == 0;
    ...
于 2012-12-26T12:55:21.073 回答