Hier ist ein vereinfachtes Beispiel. Grundsätzlich werden Zeichenfolgen aus einer Zeichenfolgenliste überprüft. Wenn die Prüfung erfolgreich ist, wird diese Zeichenfolge ( filterStringOut(i);
) entfernt, und es ist nicht mehr erforderlich, andere Prüfungen fortzusetzen. Also continue
zum nächsten String.
void ParsingTools::filterStrings(QStringList &sl)
{
/* Filter string list */
QString s;
for (int i=0; i<sl.length(); i++) {
s = sl.at(i);
// Improper length, remove
if (s.length() != m_Length) {
filterStringOut(i);
continue; // Once removed, can move on to the next string
}
// Lacks a substring, remove
for (int j=0; j<m_Include.length(); j++) {
if (!s.contains(m_Include.at(j))) {
filterStringOut(i);
/* break; and continue; */
}
}
// Contains a substring, remove
for (int j=0; j<m_Exclude.length(); j++) {
if (s.contains(m_Exclude.at(j))) {
filterStringOut(i);
/* break; and continue; */
}
}
}
}
Wie soll man die äußere Schleife innerhalb einer verschachtelten Schleife fortsetzen?
Meine beste Vermutung ist, goto
ein Etikett am Ende der äußeren Schleife zu verwenden und zu platzieren. Das veranlasste mich, diese Frage zu stellen, da Tabu sein goto
kann.
Im c ++ IRC-Chat wurde vorgeschlagen, die for
Schleifen in Bool-Funktionen zu platzieren, die true zurückgeben, wenn eine Prüfung bestanden wurde. somit
if ( containsExclude(s)) continue;
if (!containsInclude(s)) continue;
oder dass ich einfach einen lokalen Booleschen break
Wert erstelle, ihn auf true setze , bool überprüfe und fortfahre, wenn true.
Da ich dies in einem Parser verwende, muss ich in diesem Beispiel die Leistung priorisieren. Ist dies eine Situation, in der goto
es noch nützlich ist, oder ist es ein Fall, in dem ich meinen Code neu strukturieren muss?
goto
trotz ihres schlechten Rufs über zu emulieren . Fürchte keine Namen - fürchte Konzepte.