426 Stimmen

Kann ich break verwenden, um mehrere verschachtelte 'for'-Schleifen zu beenden?

Ist es möglich, die break Funktion zum Verlassen mehrerer verschachtelter for Schleifen?

Wenn ja, wie würden Sie dabei vorgehen? Können Sie auch kontrollieren, wie viele Schleifen die break Ausgänge?

355voto

Henk Holterman Punkte 249753

Nein, verderben Sie es nicht mit einem break . Dies ist die letzte verbleibende Hochburg für die Verwendung von goto .

298voto

Cullen Walsh Punkte 4198

AFAIK, C++ unterstützt keine Namensschleifen, wie Java und andere Sprachen es tun. Sie können ein goto verwenden oder einen Flag-Wert erstellen, den Sie verwenden. Am Ende jeder Schleife überprüfen Sie den Wert des Flags. Wenn er auf true gesetzt ist, können Sie die Iteration abbrechen.

132voto

Predelnik Punkte 4853

Nur um eine explizite Antwort mit Lambdas hinzuzufügen:

  for (int i = 0; i < n1; ++i) {
    [&] {
      for (int j = 0; j < n2; ++j) {
        for (int k = 0; k < n3; ++k) {
          return; // yay we're breaking out of 2 loops here
        }
      }
    }();
  }

Natürlich hat dieses Muster eine gewisse Einschränkung und offensichtlich nur C++11, aber ich denke, es ist ziemlich nützlich.

63voto

Greg Hewgill Punkte 882617

Ein anderer Ansatz, um aus einer verschachtelten Schleife auszubrechen, besteht darin, beide Schleifen in eine separate Funktion zu faktorisieren, und return aus dieser Funktion, wenn Sie sie verlassen wollen.

Dies wirft natürlich die andere Frage auf, ob man jemals ausdrücklich return aus einer Funktion an einer anderen Stelle als am Ende.

38voto

Karl Voigtland Punkte 7407

Pause verlässt nur die innerste Schleife, die sie enthält.

Sie können verwenden siehe um aus einer beliebigen Anzahl von Schleifen auszubrechen.

Natürlich siehe ist oft Als schädlich angesehen .

Ist es richtig, die Funktion break[...] zu verwenden?

Die Verwendung von break und goto kann es erschweren, Aussagen über die Korrektheit eines Programms zu treffen. Siehe hier für eine Diskussion zu diesem Thema: Dijkstra war nicht wahnsinnig .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X