13

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は、最大で 1 回挿入されますdouble **bestList
  • breakhereのインスタンスは、2 番目の (内側の)forループから抜け出します。

これは事実ですか?

4

5 に答える 5

32

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 では、ラムダを使用してインプレースで実行できるため、 gotoを使用する必要はありません。

于 2012-05-14T16:19:06.640 に答える
5

C++のステートメントは、が直接配置されているorステートメントbreakから抜け出します。この場合、ループから抜け出します。forswitchbreakfor (int j = ...

C++ ではbreak、他のループをターゲットにする方法はありません。親ループから抜け出すには、終了条件のトリガーなど、他の独立したメカニズムを使用する必要があります。

// Causes the next iteration of the 'for (int i ...' loop to end the loop)
i = npts;

// Ends the 'for (int j ...' loop
break;
于 2012-05-14T16:19:06.343 に答える
3

2 番目のループから最初のループに抜け出しています。

for (int i=0; i<npts; i++)

上部にブール値を設定できます

bool shouldBreak = false;

ブレークを書くときは、

shouldBreak = true;
break;

次に、ループの最後で、毎回確認します。

if (shouldBreak) break;
于 2012-05-14T16:19:51.227 に答える
0
for (int i = 0; i < npts; i++)

上部にブール値を設定できます

bool shouldBreak = false;

そして、他のループを壊したいときは、次のように書きます

shouldBreak = true;
break;
于 2013-05-25T04:33:01.810 に答える