Iteratoren in C reduzieren
Stellen Sie sich ein Szenario vor, in dem Sie einen Container mit Containern haben, z. B. einen Vektor
Da es keine Implementierungen von Flattening-Iteratoren in großen Bibliotheken gibt, stellen wir unten eine grundlegende Implementierung vor:
#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 }
Diese Implementierung ermöglicht es Ihnen um auf abgeflachte Weise über verschachtelte Container zu iterieren, wie im folgenden Beispiel gezeigt:
// 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 << ", "; }
Diese Implementierung wurde nicht gründlich getestet, Es werden weitere Tests empfohlen, bevor es in Produktion geht. Sollten Sie auf Fehler stoßen, wenden Sie sich bitte für Korrekturen an den Autor.
Das obige ist der detaillierte Inhalt vonWie kann ich in C einen Flattening-Iterator erstellen, um über verschachtelte Container zu iterieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!