Eigener Iterator für eigene Liste
-
Hallo,
es geht im wesentlichen um den Iterator. Alles funktioniert, allerdings ist da diese Unbequemlichkeit mit dem Dereferenzoperator. Aber erstmal die Klasse:
class Iterator { public: Iterator(); Iterator(const Iterator& rhs); Iterator(Node* rhs); const Iterator& operator++(); Iterator operator++(int); const Iterator& operator--(); Iterator operator--(int); bool operator==(const Iterator& rhs) const; bool operator!=(const Iterator& rhs) const; T* operator*() const; //?? operator->() const; private: Node* m_position; ); };
Also der Typ, auf den der Iterator "zeigt", ist ein Pointer auf Node (das Element m_position).
Die Verwendung sieht so aus:List::Iterator iter = eineListe.begin(); while(iter != eineListe.end()) { //sehr unbequemer Zugriff: (*iter)->doSomething(); ++iter; }
Der List::Iterator::operator*() gibt einfach nur m_position zurück, sodass im Grunde m_position->doSomething() dort steht. Wegen dem Vorrang der Operatoren, muss ich *iter erstmal einklammern, damit es funktioniert.
Bei der Liste aus der STL habe ich bemerkt, dass das Einklammern gar nicht nötig ist. Vielleicht liegt das an dem operator->()? Wie kann ich den überladen.
-
Ich wuerde folgende beiden Methoden implementieren:
T & operator*() const;
T * operator->() const;
-
Wie würde die Implementation für operator->() aussehn?
-
problem. schrieb:
Wie würde die Implementation für operator->() aussehn?
T & operator*() const { return m_position->_item; } T * operator->() const { return &(m_position->_item); }
-
Danke, hat gekoappt!