Maison >développement back-end >C++ >Comment puis-je inverser une boucle For basée sur une plage en C à l'aide de Boost.Range ?

Comment puis-je inverser une boucle For basée sur une plage en C à l'aide de Boost.Range ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-08 18:11:15679parcourir

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

Boucles For inversées basées sur la plage en C 11 avec Boost.Range

En C , la boucle for basée sur la plage est un outil puissant pour itérer sur les conteneurs. Cependant, par défaut, il itère du début à la fin du conteneur. Existe-t-il un moyen d'inverser cette direction ?

Itérateurs inversés avec la boucle For basée sur la plage

Une façon d'itérer sur un conteneur à l'envers consiste à utiliser le Fonctions membres rbegin() et rend(). Cependant, cela nécessite l'utilisation d'itérateurs explicites et peut devenir lourd pour des scénarios complexes :

for (auto i = c.rbegin(); i != c.rend(); ++i) { ... }

L'adaptateur inverse de Boost.Range

Heureusement, Boost.Range fournit un solution élégante avec l'adaptateur boost::adaptors::reverse. Cet adaptateur enveloppe un conteneur et inverse la direction de ses itérateurs. Cela permet une intégration transparente avec des boucles for basées sur une plage :

for (auto& i : boost::adaptors::reverse(c)) { ... }

Exemple d'utilisation

Voici un exemple d'utilisation de boost::adaptors::reverse pour itérer sur une liste dans l'ordre inverse :

#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;
}

Sortie :

19
17
13
11
7
5
3
2
2
3
5
7
11
13
17
19

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn