Heim >Backend-Entwicklung >C++ >Wie kann ich mit Boost.Range eine bereichsbasierte For-Schleife in C umkehren?

Wie kann ich mit Boost.Range eine bereichsbasierte For-Schleife in C umkehren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-08 18:11:15734Durchsuche

How Can I Reverse a Range-Based For-Loop in C   Using Boost.Range?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn