break; C++: die Schleife ist es wirklich zu brechen
einfache Frage zu C++ code:
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;
}
}
}
Möchte ich sicherstellen, dass
- Jede Zeile von
double **simplex
eingefügt wird höchstens einmal indouble **bestList
- Die Instanz von
break
hier bricht aus der zweiten (inneren)for
Schleife.
Ist das der Fall?
- Ja, es ist ein ausbrechen aus der zweiten
for
Schleife. break
bricht immer aus der inneren Struktur (Schleife oderswitch
) aktiv an diesem Punkt in dem code (in diesem Fall diefor (j ...
loop).- Brechen bricht immer die innerste Schleife. Wenn Sie wollen, brechen Sie aus mehr als, dass Sie brauchen, um einen bool oder etwas zu verfolgen, wenn Sie fortfahren oder nicht.
- Die
break
- Anweisung wird IMMER dann passieren, wennfuncEvals[i]<bestListEval[j]
isttrue
. Sollten Sie wirklich nutzen, einige bessere Variablennamen. - Hinzugefügt "C" - tag, da ist die Frage relevant für C, und der code ist in C geschrieben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die break-Anweisung in C++ wird das ausbrechen der for-oder switch-Anweisung, in der die Pause ist direkt gesetzt. Es bricht die innerste Struktur (Schleife oder switch). In diesem Fall:
Gibt es keine Möglichkeit in C++ zu haben, brechen Sie eine beliebige andere Schleife. Um zu brechen aus der übergeordneten loops, die Sie verwenden müssen, um einige der anderen unabhängigen Mechanismus wie die Auslösung der end-Zustand.
Auch, wenn Sie das Programm verlassen möchten mehr als eine innere Schleife, die Sie extrahieren können, die Schleifen in eine Funktion. In C++ 11 Lambda-Ausdrücke können verwendet werden, um es in-place - es gibt also keine Notwendigkeit, Sie zu verwenden springen.
goto
können oft verwendet werden, um aus anderen loops.findFirstElemThatXYZ
- und dann wieder, wenn ich es finde.Den
break
- Anweisung in C++ wird das ausbrechen desfor
oderswitch
Erklärung, in der diebreak
ist direkt gesetzt. In diesem Fall wird das ausbrechen desfor (int j = ...
Schleife.Gibt es keine Möglichkeit in C++ zu haben
break
beliebige andere Schleife. Um zu brechen aus der übergeordneten loops, die Sie verwenden müssen, um einige der anderen unabhängigen Mechanismus wie die Auslösung der end-Zustand.i=npts
zu brechen Sie die Schleife ist verwirrend, verwenden Sie einen boolean statt.Brechen Sie aus Ihrem zweiten Schleife, um Ihre erste Schleife.
Konnten Sie eine Boolesche oben
und beim schreiben Pause machen, schreiben
Dann am Ende der Schleife, überprüfen Sie jedes mal,
Konnten Sie eine Boolesche oben
und wenn Sie möchten, brechen Sie die andere Schleife schreiben
Mit
break
break
brechen aus dem, was die Wiederholung-oder die Iteration von Schleife, die es derzeit innerhalb der. Dieses ausführliche Bild-Anleitung ist gemeint highlightbreak
's Verhalten, nicht wie gute Codierung Praktiken. Die innere for-Schleife gereicht hätte, aber wie ich schon sagte, dies ist für visuelle Zwecke:Alternative Beratung
Verwendung Moderner C++'s verschiedene Suchmaschinen-algorithmen zur Verfügung, die in
<algorithm>
Suche auch über Container und zu einem gewissen Grad, Streicher. Der Grund dafür ist zweifach:Diese code-Beispiele benötigen, die gleichen Kessel-Platte, ausgenommen
<algorithm>
für die ältere for-Schleife sucht:Die moderne Art und Weise wäre so etwas wie dieses, wo wir schnell die Suche durch die container, und wenn Sie die search-iterator nicht an das Ende des Containers (nicht das Letzte element), wir wissen, dass der Wert, den es sucht, war sich.
Dieser code erreicht das gleiche Ergebnis mit weniger Zeilen und weniger potential points-of-failure " für Benutzer-code geschrieben, wie die älteren alternativen darunter.
Modernen C++ - Stil
C++11-range-basierte for-Schleife
Old-school C-style for-Schleife: