可能重复:
如何在布尔值(假和真)上编写“for”循环
我想两次执行相同的任务,第一次为bool flag
真,第二次为假。有没有一种优雅的方式来做到这一点(也许使用循环)?
我的想法是做类似以下的事情,但这太复杂了。
bool flag = true;
for(int i = 0; i < 2; ++i, flag = !flag)
{
// ...
}
可能重复:
如何在布尔值(假和真)上编写“for”循环
我想两次执行相同的任务,第一次为bool flag
真,第二次为假。有没有一种优雅的方式来做到这一点(也许使用循环)?
我的想法是做类似以下的事情,但这太复杂了。
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-loop 的好方法。
bool flag = false;
do
{
// ...
flag = !flag;
}
while(flag)
由于 do-while-loop 中的代码至少执行一次,所以我可以在最后切换标志并恰好运行两次。
在函数中调用它的解决方案可能是最好的,但您也可以这样做:
for( int i = 0; i < 2; ++i ) {
bool flag = i == 0;
...