Die continue-Anweisung in C++

Jinku Hu 12 Oktober 2023
Die continue-Anweisung in C++

In diesem Artikel wird erklärt, wie Sie die Anweisung continue in C++ verwenden.

Verwenden Sie die Anweisung continue, um den verbleibenden Teil des Schleifenkörpers zu überspringen

Die Anweisung continue wird in Verbindung mit Iterationsanweisungen verwendet, um die schleifenabhängige Blockausführung zu manipulieren. Sobald nämlich die Anweisung continue in der Schleife erreicht ist, werden die folgenden Anweisungen übersprungen, und die Steuerung geht zum Schritt der Bedingungsbewertung über. Wenn die Bedingung wahr ist, beginnt die Schleife wie gewohnt mit einem neuen Iterationszyklus.

Beachten Sie, dass continue nur in einem Codeblock enthalten sein kann, der von mindestens einer der Schleifenanweisungen eingeschlossen ist: for, while, do...while oder bereichsbasiertes for. Angenommen, wir haben mehrere verschachtelte Schleifen und die Anweisung continue ist in der inneren enthalten. Das Überspringen-Verhalten betrifft nur die innere Schleife, während sich die äußere wie gewohnt verhält.

Im folgenden Beispiel demonstrieren wir zwei for-Schleifen, deren innere durch den Vektor von Strings iteriert. Beachten Sie, dass die Anweisung continue am Anfang des Schleifenkörpers angegeben wird und im Wesentlichen steuert, ob die folgende Anweisung ausgeführt wird. Somit werden die Stringwerte mit rtop und ntop bei der Ausgabe nicht angezeigt und die äußere Schleife führt alle ihre Zyklen aus.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;

int main() {
  vector<string> vec = {"ntop", "mtop", "htop", "ktop",
                        "rtop", "ltop", "ftop", "atop"};

  for (int i = 0; i < 3; i++) {
    for (const auto &it : vec) {
      if (it == "rtop" || it == "ntop") continue;

      cout << it << ", ";
    }
    cout << endl;
  }

  return EXIT_SUCCESS;
}

Ausgabe:

mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,
mtop, htop, ktop, ltop, ftop, atop,

Alternativ können wir das gleiche Verhalten des vorherigen Code-Schnipsels mit der Anweisung goto anstelle von continue implementieren. Denken Sie daran, dass goto als unbedingter Sprung zu der angegebenen Zeile im Programm fungiert und nicht verwendet werden sollte, um Anweisungen zur Initialisierung von Variablen zu überspringen. In diesem Fall kann die leere Anweisung mit dem Label END markiert werden, damit goto die Ausführung an die angegebene Stelle verschiebt.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;

int main() {
  vector<string> vec = {"ntop", "mtop", "htop", "ktop",
                        "rtop", "ltop", "ftop", "atop"};

  for (int i = 0; i < 3; i++) {
    for (const auto &it : vec) {
      if (it == "rtop" || it == "ntop") goto END;

      cout << it << ", ";
    END:;
    }
    cout << endl;
  }

  return EXIT_SUCCESS;
}

Die Anweisung continue kann von einigen Coding-Richtlinien als schlechte Praxis angesehen werden, was die Lesbarkeit des Codes etwas erschwert. Dieselbe Empfehlung wird oft bei übermäßigem Gebrauch von goto-Anweisungen ausgesprochen. Dennoch kann man diese Konstrukte verwenden, wenn das gegebene Problem die Lesbarkeitskosten verinnerlichen und mit diesen Anweisungen eine einfachere Implementierung bieten kann. Das nächste Codebeispiel zeigt die grundlegende Verwendung der continue-Anweisung in einer while-Schleife.

#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;

int main() {
  vector<string> vec = {"ntop", "mtop", "htop", "ktop",
                        "rtop", "ltop", "ftop", "atop"};

  while (!vec.empty()) {
    if (vec.back() == "atop") {
      vec.pop_back();
      continue;
    }

    cout << vec.back() << ", ";
    vec.pop_back();
  }
  cout << "\nsize = " << vec.size() << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

ftop, ltop, rtop, ktop, htop, mtop, ntop,
size = 0
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Loop