有关C++代码的简单问题:

for(int i=0;i<npts;i++)
{
    for(int j=i;j<2*ndim;j++)
    {
        if(funcEvals[i]<bestListEval[j])
        {
            bestListEval[j] = funcEvals[i];
            for(int k=0;k<m_ndim;k++)
                bestList[j][k] = simplex[i][k];
            break;
        }
    }
}

我要确保
  • 每行double **simplex最多插入一次double **bestList
  • 此处break的实例脱离了第二个(内部)for循环。

  • 是这样吗

    最佳答案

    C++中的break语句将脱离直接放置中断的for或switch语句。它破坏了最里面的结构(回路或开关)。在这种情况下:

        for(int i=0;i<npts;i++)
        {
            for(int j=i;j<2*ndim;j++)
            {
                if(funcEvals[i]<bestListEval[j])
                {
                    bestListEval[j] = funcEvals[i];
                    for(int k=0;k<m_ndim;k++)
                        bestList[j][k] = simplex[i][k];
                    break;
                }
            }
            // after the 'break' you will end up here
        }
    

    在C++中,没有办法让中断指向其他任何循环。为了打破父循环,您需要使用其他一些独立的机制,例如触发结束条件。

    另外,如果要退出多个内部循环,则可以将该循环提取到一个函数中。在C++ 11中,可以使用lambda就地进行操作-因此将不需要使用goto。

    关于c++ - 打破; C++ : which loop is it actually breaking,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10587196/

    10-09 07:24