Iterator für einfach verkette Liste schreiben
-
Ich muss einen Iterator für eine einfach verkettete Liste schreiben.
Wo finde ich ein Beispiel dafür?
-
im stl header namens <LIST>
Da musst du im grunde einfach nur den -- operator aus der "iterator"-klasse entfernen, und hast im grunde das was du willst, angenommen, deine liste ist in etwa so aufgebaut, wie das original. Im Magazin gibt es drei artikel über die stl, unter anderem steht in einem alles, was man so über iteratoren wissen sollte

\edit: aber irgendwie kommt mir die aufgabe etwas mysteriös vor, man kann doch nicht einfach so eine iterator-klasse schreiben, die im luftleeren raum rumhängt... wie sieht es denn mit dem eigentlichen container aus?
-
Andrey schrieb:
im stl header namens <LIST>
Bitte kleingeschrieben, case-sensitive ftw!

Ein weiteres Beispiel (was möglicherweise deutlich hilfreicher ist) ist in der Boost.Iterator-Bibliothek unter iterator_(adaptor|facade).
Andrey schrieb:
\edit: aber irgendwie kommt mir die aufgabe etwas mysteriös vor, man kann doch nicht einfach so eine iterator-klasse schreiben, die im luftleeren raum rumhängt... wie sieht es denn mit dem eigentlichen container aus?
Klar kann man Iteratoren schreiben, die unabhängig von Containern sind. Das ist ja gerade der Sinn dieser Abstraktion.
Beispiele sind ebenfalls in der Boost.Iterator-Bibliothek zu finden. Hier im Forum ist auch irgendwo noch ein Thread, in dem ein Iterator gezimmert wurde, der die Fibonacci-Folge generiert (was ziemlich trivial ist, aber gerade deshalb finde ich, dass er ein gutes Beispiel ist).
-
Du brauchst nur
Konstruktor
operator++
operator!=
operator->
operator*Dann kannste schon mit einer for-Schleife durchiterieren. Und alle Funktionen sind Einzeiler.
-
Aber dann sinds noch keine Iteratoren im Sinne der STL!
Die brauchen mindestens noch ein paar typedefs, z.B. value_type.