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!