如何在for循环内退出(转到父循环的下一个元素)for循环

时间:2011-06-17 20:35:25

标签: c++ for-loop

for (int i = 0; i<10; i++)
{ 
  //do some validation for record length

  //if it is not valid

  continue; // goes to the next iteration in for loop for 'i'

  for (int j = 0; j<5; j+=2)    
  {

     //do some more validation for individual record

     //if it is not valid

如果我使用i,它应转到下一个continue。这将转到下一个j     谁能告诉我怎么做?

7 个答案:

答案 0 :(得分:2)

break;循环中使用j将完全退出j循环。

但至少要花几分钟的时间来决定是否有替代的算法,方法或终止条件可以消除在循环中断的需要。

答案 1 :(得分:2)

如果内循环之后有东西,你需要专门测试外循环中的标志:

for(some_outer_vars){
  bool should_skip = false;
  // ...
  for(some_inner_vars){
    // ...
    if(your_condition){
      should_skip = true;
      break;
    }
  }
  if(should_skip)
    continue;
  // ...
}

答案 2 :(得分:1)

内循环后你有什么东西吗?如果没有,您可以使用break

for (i = 0; i < 10; i++)
{
  if (i is no good)
    continue;

  for (j = 0; j < 5; j++)
  {
     if (j is no good)
       break;
  }
}

如果您确实需要稍后执行某些操作,可以将break与其他标记结合使用。

答案 3 :(得分:0)

改为放置break;。这应该让你脱离内循环。

答案 4 :(得分:0)

for(int i = o; i&lt; 10; i ++) {

}

for(int j = 0; j <5; j + = 2) {    打破; }

“打破;”将结束当前的j循环并转到下一个i。

答案 5 :(得分:0)

如果您无法排列逻辑,以便内循环中的break直接继续外循环,那么执行以下操作:

for (int i = 0; i<10; i++)
{ 
    if (!valid(i)) continue;
    for (int j = 0; j<5; j+=2)    
    {
        if (!valid(i,j)) goto continue_i;
        do_whatever_with_i_and_j()
    }
    more_stuff_here();
continue_i:
}

在那里,我已经说过了。代码比设置标志的版本更短,更简单,更易于阅读和分析,然后中断,然后立即再次检查标志并有条件地继续。

另一种选择是

void inner_loop(int i) {
    if (!valid(i)) return;
    for (int j = 0; j<5; j+=2)    
    {
        if (!valid(i,j)) return;
        do_whatever_with_i_and_j()
    }
    more_stuff_here();
}

for (int i = 0; i<10; i++)
{
    inner_loop(i);
}

根据内部循环的作用,您可能会发现自己构建了一种机制,可以让它访问它应该修改的内容。

社区维基,因为这个(或类似的情况)在SO上被多次论证,实际上定义了“主观和议论”。

答案 6 :(得分:0)

我尝试避免中断并在处理循环时继续,因为如果您以后必须重新构建代码,它们很容易被遗漏并且它们的含义会发生变化。你可以使用j = 5;当你需要退出内循环。如果添加第三个循环或开关,则该行的含义不会改变。有时你需要在你的循环中添加if语句来测试i和j,或者甚至是像bool iIsInvalid这样的新变量,但我认为这样可以更容易阅读控制流。