Dies sollte nicht funktionieren - nicht sogar "nach einer" naiven "Ansicht". Obwohl jeder Zeiger ein Iterator ist, ist das Gegenteil nicht unbedingt wahr. Warum würden Sie erwarten, dass das funktioniert?
Es würde unter zwei Szenarien funktionieren:
Die iterator
der std::vector<T>
Implementierung ist eigentlich ein T*
. Dann würde Ihr Code seit decltype(i) == int*
und decltype(j) == int*)
funktionieren. Dies mag für einige Compiler der Fall sein, aber Sie sollten sich nicht einmal darauf verlassen, wenn es für Ihren Compiler wahr ist.
Der Dereferenzierungsoperator nicht ein Objekt vom Typ T
zurück, sondern eher etwas, das T
konvertierbar ist und hat eine überladenes operator&
, die wieder den Iterator gibt. Dies ist aus sehr guten Gründen nicht der Fall.
könnten Sie -wie andere haben suggested- Überlastung operator==
zu prüfen, ob beide Indirekt (Zeiger und Iterator) das gleiche Objekt verweisen aber ich vermute, dass Sie die Adresse des Operators wollen Sie wieder den Iterator zu geben, die nicht sein kann erreicht, wenn der Iterator kein Zeiger ist, weil der Objekttyp, der in dem Vektor gespeichert ist, keine Vorstellung von Vektor/Iterator oder was auch immer hat.
Das Problem ist nicht in der Gleichheits-Operator, was ich brauche, ist die Dereferenzierungsoperator definieren einen Iterator
Sie können nicht zu geben. Der betreffende Dereferenzierungsoperator ist std::vector<int>::iterator
, der Teil der Standardbibliothek ist, und Sie können ihn manipulieren (und nicht).
anzumerken, dass, da C++ 11 in einer std::vector<T, A>
,
value_type
ist T
und
reference
T&
ist.
Darüber hinaus gilt Folgendes:
- All Eingang Iteratoren
i
Unterstützung *i
, die einen Wert vom Typ gibt T
etwas den Werttyp diesen Iterator.
- Der Iterator
std::vector<T>
muss T
als seinen Werttyp haben.
- Ein Iterator von
std::vector<T>
ist ein Eingabe-Iterator.
Das sieht für mich wie ein [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) aus. Was ist dein eigentliches Ziel? An welchem Punkt möchten Sie, dass dieses Verhalten gültig ist? – Pixelchemist
Ja. * Warum * möchten Sie den Operator "In tatsächliche Adresse konvertieren" (& *) unterbrechen? –
erklären, was Sie „Arbeit“ –