Algorithmen modernes (C++)
Für moderne C++-Programmierung, empfehlen wir die Verwendung von Algorithmen in der Standard Template Library (STL).Hier sind einige wichtige Beispiele:
for_each, ist der Standardalgorithmus für den Durchlauf.(Auch transform für nicht-in-Place-Semantik.)
find_if, ist der Standardalgorithmus für die Suche.
sort, lower_bound, und die anderen Standardeinstellungen Sortier- und Suchvorgänge Algorithmen.
Verwenden, um eine Comparator schreiben strenge < und namens Lambda-Ausdrücke Wenn Sie können.
auto comp = []( const widget& w1, const widget& w2 )
{ return w1.weight() < w2.weight(); }
sort( v.begin(), v.end(), comp );
auto i = lower_bound( v.begin(), v.end(), comp );
Schleifen
Verwenden Sie möglichst bereichsbasierten for Schleifen oder Algorithmus Anrufe oder beide statt Schleifen von Hand geschrieben.copy, transform, count_if, remove_if, und andere sind viel besser als handschriftliche Schleifen, da ihre Absicht klar ist, und sie es einfacher machen, fehlerfreien Code zu schreiben.Außerdem haben viele STL-Algorithmen eine effizientere Implementierung-Optimierungen.
Anstelle des alten C++ wie folgt:
for( auto i = strings.begin(); i != strings.end(); ++i ) {
:::
:::
}
auto i = v.begin();
for( ; i != v.end(); ++i ) {
if (*i > x && *i < y) break;
}
Verwenden Sie moderne C++ wie folgt:
for_each( begin(strings), end(strings), []( string& s ) {
:::
:::
} );
auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );
Bereichsbasierten for-Schleifen
Die Range-basierte for Schleife ist eine C ++ 11-Sprache-Funktion, keine STL-Algorithmus.Aber es verdient Erwähnung in dieser Diskussion über Schleifen.Bereichsbasierten for Loops sind eine Erweiterung von der for Schlüsselwort und bieten eine bequeme und effiziente Weise Schleifen zu schreiben, die einen Wertebereich durchlaufen.STL-Containern, Zeichenfolgen und Arrays sind für fertige bereichsbasierten for Schleifen.Um diese neue Iteration Syntax für den benutzerdefinierten Typ zu aktivieren, fügen Sie die folgende Unterstützung:
A begin Methode, die an den Anfang der Struktur einen Iterator zurückgibt und ein end Methode, die einen Iterator am Ende der Struktur zurückgibt.
Unterstützung bei der Iterator für diese Methoden: operator*, operator!=, und operator++ (Präfix-Version).
Diese Methoden können Mitglieder oder eigenständige Funktionen sein.