==================================================== Iteratoren mit Zeigern in dynamische Datenstrukturen [TOC] ==================================================== Wenn wir mit Iteratoren und dynamischen Datenstrukturen operieren, müssen wir festlegen, was mit Iteratoren geschieht, wenn die referenzierte Datenstruktur abgebaut wird. Theoretisch wäre es denkbar, die Datenstruktur dann weiterzubestehen lassen. Dies würde aber eine weitere Indirektion kosten, da dann die gesamte Datenstruktur hinter einen weiteren `std::shared_ptr` versteckt werden müsste, auf den der Iterator zeigt. Normalerweise wird aber (wie in der STL) davon ausgegangen, dass den Iteratoren die dynamischen Datenstrukturen nicht gehören. Fragen und Aufgabe ================== * Was muss die Datenstruktur eines Iterators für eine Hash-Tabelle umfassen, damit wir die Hash-Tabelle vorwärts durchlaufen können? * Wie verweisen wir am besten auf den gesamten Inhalt der Hash-Tabelle? Hat das Konsequenzen für die Datentypen der Hash-Tabelle selbst? * Wie können Sie den Ende-Iterator repräsentieren? * Wie können Sie sicherstellen, dass Iteratoren (wie bei Forward-Iteratoren üblich) Zuweisungen unterstützen? Aufgabe ======= * Implementieren Sie einen Forward-Iterator für die Hash-Tabelle mit den zugehörigen Operationen begin und end. * Für den Forward-Iterator benötigen Sie folgende Methoden: - Einen _default constructor_, der einen am Ende stehenden Iterator liefert, - einen Konstruktor, der den Iterator an den Anfang einer Hash-Tabelle setzt, - einen Operator für die Dereferenzierung, - einen Operator für das Inkrement (auf das Post-Inkrement können Sie verzichten) und - den Operator != (ggf. gleich in Kombination mit ==). * Ersetzen Sie im Testprogramm den Aufruf der `for_each`-Methode durch eine `for`-Schleife, die durch alle Elemente durchiteriert. Vorlage ======= :import: session08/step01/Hash.hpp [fold] :import: session08/step01/testit.cpp [fold] :navigate: up -> doc:index back -> doc:session08/page02 next -> doc:session08/page04