C ++ 11是否引入了任何新的方法来打破嵌套的for循环?

时间:2013-04-26 14:23:50

标签: c++ c++11 idioms

在其他

中考虑 的情况
int f( ... )
{
  for (int i = start_a; i < end_a; i++)
  {
    for (int j = start_b; j < end_b; j++)
    {
      // make some computation
      if( i_must_exit == true)
      {
        // exit from all for
      }
    }
  }

  // I want arrive here
}

我们想要从两个for循环中断。如果不分解内部函数,抛出异常等,在C ++ 03中这并不容易。我想知道C ++ 11是否引入了一种机制来实现这一点。

3 个答案:

答案 0 :(得分:11)

我认为最好的解决方案是使用迭代器和算法,例如std::find_if

答案 1 :(得分:2)

我认为最好的解决方案是使用lambda ......就像这样:

int f()
{
  [&]{
    for (int i = start; i < end; i++)
    {
      for (int j = start_; j < end_; j++)
      {
        // make some computation
        if( i_must_exit == true)
        {
          // exit from all for
          return;
        }
      }
    }
  }(); // execute this code now!

  // continue with computation
}

答案 2 :(得分:0)

int f( ... )
{
  bool b = false;

  for (int i = start_a; i < end_a; i++)
  {
    for (int j = start_b; j < end_b; j++)
    {
      // make some computation
      if( i_must_exit == true)
      {
         b = true;
         break;
      }
    }
    if (b)
        break;
  }

  // I want arrive here
}