直接从嵌套循环内部移至外部循环的下一个迭代

时间:2020-09-15 01:55:46

标签: c++ conditional-statements c++17 nested-loops break

我有一个嵌套循环,在内部循环中,我正在进行条件检查,如果满足条件检查,我想跳到外部循环的下一个迭代。

类似这样

for( int i = 0 ; i < n ; i++ ){
    for( int j = 0 ; j < n ; j++ ){
            if( condition ){
                // Move to next iteration of first or external loop 
                // skip the work and work2 both
            }
            // some work being done
            work(); 
        }
        work2(); 
}

我的意思是,如果条件满足 i = 2 j = 5
我想移到 i = 3

是否可以使用不类似于break语句的布尔值来做任何事情?

3 个答案:

答案 0 :(得分:2)

除了注释中指出的要强制使用j的值之外,还可以使用lambda并将其内联调用。有点难看,但是能完成工作:

for( int i = 0 ; i < n ; i++ ){
    [&]() // OR [=]() OR [i, n]() depending on your usage
    {
        for( int j = 0 ; j < n ; j++ ){
            if( condition ){
                return;
            }
            // some work being done
            work(); 
        }
    }();
}

答案 1 :(得分:0)

您可以将condition部分放入内部for循环迭代检查部分。

如下:

for( int i = 0 ; i < n ; i++ )
{
    for( int j = 0 ; (j < n) && conditionCheckFunction() ; j++ )
    {
        work(); 
    }
}  

答案 2 :(得分:0)

如果您的条件得到满足,则只需break即可进入内循环。然后控制流将转到外循环的下一个迭代:

for(int i = 0 ; i < n ; i++) {
    for(int j = 0 ; j < n ; j++) {
        if( condition ) {
            break;  // out of inner loop
        }
        work(); 
    }
}