Umgekehrte bereichsbasierte For-Schleifen in C 11 mit Boost.Range
In C ist die bereichsbasierte For-Schleife eine leistungsstarkes Tool zum Durchlaufen von Containern. Standardmäßig wird jedoch vom Anfang des Containers bis zum Ende iteriert. Gibt es eine Möglichkeit, diese Richtung umzukehren?
Umgekehrte Iteratoren mit der bereichsbasierten For-Schleife
Eine Möglichkeit, umgekehrt über einen Container zu iterieren, ist die Verwendung von Mitgliedsfunktionen rbegin() und rend(). Dies erfordert jedoch die Verwendung expliziter Iteratoren und kann für komplexe Szenarien unhandlich werden:
for (auto i = c.rbegin(); i != c.rend(); ++i) { ... }
Boost.Range's Reverse Adapter
Glücklicherweise bietet Boost.Range einen elegante Lösung mit dem boost::adaptors::reverse Adapter. Dieser Adapter umhüllt einen Container und kehrt die Richtung seiner Iteratoren um. Dies ermöglicht eine nahtlose Integration mit bereichsbasierten For-Schleifen:
for (auto& i : boost::adaptors::reverse(c)) { ... }
Verwendungsbeispiel
Hier ist ein Beispiel für die Verwendung von boost::adaptors::reverse zum Iterieren über eine Liste in umgekehrter Reihenfolge:
#include <list> #include <iostream> #include <boost/range/adaptor/reversed.hpp> int main() { std::list<int> x{2, 3, 5, 7, 11, 13, 17, 19}; for (auto i : boost::adaptors::reverse(x)) { std::cout << i << '\n'; } for (auto i : x) { std::cout << i << '\n'; } return 0; }
Ausgabe:
19 17 13 11 7 5 3 2 2 3 5 7 11 13 17 19
Das obige ist der detaillierte Inhalt vonWie kann ich mit Boost.Range eine bereichsbasierte For-Schleife in C umkehren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!