打破嵌套循环C ++

时间:2015-01-05 21:37:14

标签: c++

我有一个这样的嵌套循环结构:

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 ++。

4 个答案:

答案 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;
}();

或者,给该子程序命名并简单地调用它。