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
Libérer: 2024-12-08 18:11:15
original
735 Les gens l'ont consulté

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) { ... }
Copier après la connexion

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)) { ... }
Copier après la connexion

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;
}
Copier après la connexion

Sortie :

19
17
13
11
7
5
3
2
2
3
5
7
11
13
17
19
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal