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
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