============================ Antworten und Beispiellösung [TOC] ============================ Zu den Fragen ============= * Wir benötigen Zugang zur Bucket-Table mitsamt deren Dimensionierung, einen laufenden Index für die Bucket-Table und einen Zeiger auf das aktuelle Objekt. * Wenn wir eine Referenz auf die Hash-Tabelle verwenden würden, dann haben wir keine Unterstützung für Zuweisungen. Wir könnten zwar einen Zuweisungs-Operator definieren, hätten dann aber ein Problem, wenn die Referenzen nicht übereinstimmen würden. Daher ist am besten, einen `std::weak_ptr` auf die Bucket-Tabelle zu haben mitsamt einer lokalen Kopie der Dimensionierung. Alternativ könnten wir auch mit einer weiteren Indirektion dies vereinfachen. Die Konsequenz ist, dass wir für die Bucket-Table nicht mehr `std::unique_ptr` nehmen können, sondern `std::shared_ptr` benötigen. (Dies geht ab C++17.) * Den Ende-Iterator repräsentieren wir mit einem Index, der den Wert der Dimensionierung der Bucket-Table erreicht hat und einem Objekt-Zeiger, der null ist. Beispiellösung ============== :import: session08/step02/Hash.hpp :import: session08/step02/testit.cpp ---- SHELL (path=session08/step02,hostname=theon) -------- g++ -std=c++17 -Wall -o testit testit.cpp valgrind ./testit doc:index back -> doc:session08/page03 next -> doc:session08/page05