There is also the option to make the content of the outer loop (the one you want to continue) a lambda, and simply use return.
It's surprisingly easy if you know lambdas; you basically start your loop interior with [&](){ and end it with }(); inside you can use return; at any time to leave it:
void ParsingTools::filterStrings(QStringList &sl)
{
/* Filter string list */
QString s;
for (int i=0; i<sl.length(); i++) {
[&]() { // start a lamdba defintion and call it right away
s = sl.at(i);
// Improper length, remove
if (s.length() != m_Length) {
filterStringOut(i);
// continue; // Once removed, can move on to the next string
return; // happily return here, this will continue
}
// 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; */ return; // happily return here, this will continue the i-loop
}
}
// 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; */ return; // happily return here, this will continue the i-loop
}
}
}() // close/end the lambda definition and call it
}
}