Meine aktuelle Aufgabe ist das Schreiben einer Liste mit Iteratoren. Die Liste ist kein so großes Problem wie das Erstellen der Iterator-Klasse.Semantik von -> Operator in Listen (und allgemein C++)
Aus ein paar Quellen habe ich gesehen, dass ich zwei Operatoren in meiner Iteratorklasse definieren muss: operator*
und operator->
.
Großartig so weit! meine Iterator Struktur Gesetzt ist so
// Nested class of List
class _Iter
{
private:
ListElem *pCurr;
const List *pList;
public:
_Iter(ListElem *pCurr, const List *list)
: pCurr_(pCurr), pList(list)
{}
T& operator*() { return pCurr_->data; }
T* operator->() { return &**this; }
};
mit ListElem
// Nested struct of List
struct ListElem
{
T data;
ListElem *next;
ListElem *prev;
};
zu sein ich kann ich mache etwas falsch massiv (als Doppel dereferenzierenden dies sehen zu einem & (* pCurr _-> Daten führen würde)
Mein Hauptproblem ist nicht zu verstehen, was -> in diesem Fall eigentlich tun soll.Wird es dem Benutzer Zugriff auf die Klasse ListElem geben? Wenn das der Fall ist, warum kann ich nicht schreibe einfach
ListElem *operator->() { return pCurr_; }
anstatt einen Zeiger zurückzugeben? Mein Verständnis dieser beiden Operatoren wie in meiner Liste verwendet (und hoffentlich auch STL-Listen) ist, dass:
operator*() // Return data pointed to by iterator; pCurr_->data;
operator->() // Grant access to data-holding structure; pCurr;
Ist das richtig, oder was bin ich nicht bekommen? (Und hat ->
einen Eigennamen?)
In der Tat vergesse ich oft, dass "das" eigentlich ein Zeiger ist. Sehr nervig: D – IAE