Einen Iterator reduzieren
Iteratoren sind für die Navigation durch Datensammlungen unerlässlich. In bestimmten Situationen kann es jedoch vorkommen, dass Sie auf Container voller Container stoßen, was es schwierig macht, die gesamte Struktur in einem einzigen Durchgang zu durchlaufen. In solchen Fällen kann ein „Flattening-Iterator“ den Prozess vereinfachen.
Flattening-Iteratoren
Ein Flattening-Iterator stellt einen Container mit Containern als einzelne, abgeflachte Folge von Elementen dar . Dadurch können Sie alle Elemente nacheinander durchlaufen, unabhängig von ihrer ursprünglichen Verschachtelung.
Mangel an integrierten Implementierungen
Trotz der Nützlichkeit von Flattening-Iteratoren gibt es diese nicht Es gibt nicht viele bereits vorhandene Implementierungen in großen Bibliotheken wie Boost. Lassen Sie uns daher in eine grundlegende Implementierung eintauchen, die diese Lücke schließt.
Eine benutzerdefinierte Implementierung
Die bereitgestellte Implementierung, flattening_iterator, ist ein Vorwärtsiterator, der jeden Container „flacht“. von Containern. Es funktioniert durch Iteration durch den äußeren Container und rekursive Iteration durch alle verschachtelten Container. Um leere Innencontainer zu verarbeiten, stellt die Funktion „advance_past_empty_inner_containers“ sicher, dass der Iterator diese überspringt.
Verwendung
Mit der Flatten-Funktion können Sie bequem einen Flattening-Iterator für einen bestimmten Container erstellen von Containern. Hier ist ein minimaler Testfall:
#include <algorithm> #include <iostream> #include <set> #include <vector> using namespace std; int main() { // Generate some test data vector<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 != v.end(); ++it) { cout << *it << ", "; } cout << "\n"; // Using standard library algorithms copy(flatten(v.begin(), v.end()), flatten(v.end()), ostream_iterator<int>(cout, ", ")); return 0; }
Einschränkungen
Obwohl diese Implementierung funktionsfähig ist, ist es erwähnenswert, dass sie nicht gründlich getestet wurde. Wenn Sie auf Fehler stoßen, melden Sie diese bitte, damit diese behoben werden können.
Das obige ist der detaillierte Inhalt vonWie kann ich einen Flattening-Iterator für verschachtelte Container in C erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!