Maison >développement back-end >C++ >Comment parcourir des paires d'éléments consécutifs en C sans séparateurs indésirables ?
Itérer sur des paires d'éléments consécutifs avec des idiomes C
Une tâche de programmation courante consiste à parcourir une collection et à effectuer une action entre chaque paire consécutive d'éléments éléments. Bien qu'une boucle de base à distance puisse gérer l'itération, elle entraîne souvent un séparateur indésirable à la fin.
Heureusement, il existe plusieurs approches idiomatiques pour résoudre ce problème. Une méthode consiste à utiliser un pointeur supplémentaire pour suivre l'état du séparateur :
<code class="cpp">const auto separator = "WhatYouWantHere"; const auto* sep = ""; for(const auto& item : items) { std::cout << sep << item; sep = separator; }
Dans cet exemple, le pointeur sep est initialisé sur une chaîne vide. Au fur et à mesure que la boucle progresse, sep est mis à jour avec la chaîne de séparation chaque fois qu'un élément non final est rencontré. Par défaut, sep sera une chaîne vide avant le premier élément, ce qui n'entraînera aucun séparateur principal.
Alternativement, certaines bibliothèques C fournissent des itérateurs spécialisés qui gèrent la logique du séparateur. Par exemple, la bibliothèque Boost Range inclut la fonction adjacent_filtered, qui peut être utilisée pour appliquer un prédicat à des paires d'éléments successives et filtrer celles qui échouent au prédicat :
<code class="cpp">#include <boost/range/algorithm/adjacent_filtered.hpp> for(auto& adjacent_pair : boost::adjacent_filtered(items, [](const auto& lhs, const auto& rhs) { return lhs != rhs; })) { std::cout << adjacent_pair.first << " separator " << adjacent_pair.second; }</code>
Cette approche fournit une solution concise et élégante. , mais nécessite l'utilisation d'une bibliothèque externe. En fin de compte, le choix de l'idiome à utiliser dépend des besoins et préférences spécifiques du programmeur.
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!