有关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/