Aplatissement des itérateurs en C
Considérez un scénario dans lequel vous avez un conteneur de conteneurs, tel qu'un vecteur
En l'absence d'implémentations d'itérateurs d'aplatissement existantes dans les principales bibliothèques, nous présentons ci-dessous une implémentation de base :
#include <algorithm> #include <iostream> #include <set> #include <vector> template <typename OuterIterator> class flattening_iterator { public: // ... Iterator definitions and implementation private: void advance_past_empty_inner_containers() { // ... Advance logic } // ... Private members }; template <typename Iterator> flattening_iterator<Iterator> flatten(Iterator it) { // ... Return a flattening iterator for a single range } template <typename Iterator> flattening_iterator<Iterator> flatten(Iterator first, Iterator last) { // ... Return a flattening iterator for a range }
Cette implémentation vous permet pour parcourir les conteneurs imbriqués de manière aplatie, comme le démontre l'exemple suivant :
// Generate some test data std::vector<std::vector<int>> v(3); int i(0); for (auto it(v.begin()); it != v.end(); ++it) { it->push_back(i++); it->push_back(i++); it->push_back(i++); it->push_back(i++); } // Flatten the data and print all the elements for (auto it(flatten(v.begin(), v.end())); it != flatten(v.end()); ++it) { std::cout << *it << ", "; }
Cette implémentation n'a pas été testée de manière approfondie, et des tests supplémentaires sont recommandés avant de le mettre en production. Si vous rencontrez des bugs, n'hésitez pas à contacter l'auteur pour les corrections.
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!