我有一个这样的嵌套循环结构:
for(int i =0; i<3; i++ ){
for(int j=0; j<4; j++)
{
if( ar[i][j]==0){
flag=true; continue;
}else{
flag=false; break;
}
}
现在我怎样才能摆脱两个循环。我看过类似的问题,但答案可以在java中找到我想要的c ++。
答案 0 :(得分:6)
您可以检查for-conditions中的标志(检查其他答案)或使用goto。
flag=true;
for(int i =0; i<3; i++ )
{ for(int j=0; j<4; j++)
{ if( ar[i][j]!=0)
{ flag=false;
goto out;
}
}
}
out:
// code continues here
答案 1 :(得分:3)
您可以在for
循环中放置一个更复杂的表达式来提前终止循环。
for(int i =0; i<3 && flag; i++ ){
flag = false;
for(int j=0; j<1 && !flag; j++)
{
if( ar[i][j]==0){
flag=true; continue;
}else{
flag=false; break;
}
}
答案 2 :(得分:2)
假设当你想要爆发时,旗帜只会是假的,那就这样做:
for(int i =0; i<3; i++ ){
for(int j=0; j<1; j++)
{
if( ar[i][j]==0){
flag=true; continue;
}else{
flag=false; break;
}
}
if( !flag ) { break; }
}
答案 3 :(得分:1)
你在这里做的事实上是重新实现std::any_of
(或std::all_of
);你可以改用它。当然,这可能意味着嵌套any_of
调用以在维度上迭代它,或者使用单维数组,或者使用数组的一维视图呈现any_of
。
或者,如果你真的想重新发明轮子:
将它们作为子程序调用并返回结果:
bool flag = [&ar]{
for(int i =0; i<3; i++ ){
for(int j=0; j<4; j++)
{
if( ar[i][j]==0){
continue;
} else {
return false;
}
}
}
return true;
}();
或者,给该子程序命名并简单地调用它。