Jedes Element hat tatsächlich eine eindeutige Adresse im Speicher. Betrachten wir im Grunde genommen diesen Beispielvektor:
template <class T>
class vec
{
public:
vec() ;
~vec() ;
T * elements;
}
Sie können hier sehen, ist nur ein Beispiel für einen Vektor. Die Iteratoren zeigen also auf jeden Zeiger im Element. Sie haben möglicherweise keine eindeutige Adresse, aber sie zeigen auf jedes Element im Vektor. Jeder Iterator hat also UNIQUE Speicheradressen.
Und wie ich in meinen Kommentaren sagte, können sie nicht anders arbeiten, da die Vektoren und ihre Iteratoren Bibliotheken sind, die von Leuten wie Ihnen mit C++ erstellt wurden. Sie können nicht anders funktionieren als Zeiger, die in der Sprache C++ erstellt werden.
Auch von Referenzen: (draft von C++ 0x):
23.2.6 Klasse Schablonenvektor [Vector]
1 Ein Vektor ist eine Folge Behälter, der Iteratoren random access unterstützt . Darüber hinaus unterstützt es (amortisiert) konstante Zeit Einfügen und Löschen von Operationen am Ende; Einfügen und Löschen in der Mitte nehmen lineare Zeit. Storage Verwaltung wird automatisch behandelt, obwohl Hinweise gegeben werden können, um die Effizienz zu verbessern. Die Elemente eines Vektor sind zusammenhängend gespeichert, was bedeutet, dass, wenn v
ein vector<T, Allocator>
ist, wo T
eine Art ist, andere als Bool, dann gehorcht er die Identität &v[n] == &v[0] + n
für alle 0 <= n < v.size()
.
Sie können nicht anders als Zeiger arbeiten. Der Iterator ist eine Bibliothek, die eine Person wie du aus C++ erstellt hat. Zeiger sind in C++ Sprache – amanuel2
@ amanuel2 gebaut - so hat jedes Vektorelement eine eindeutige Speicheradresse? Oder hat der Vektor nur eine Adresse? – MKSnazzy
Jedes Element hat eine eindeutige Speicheradresse. Vektoren basieren auf einem Zeiger (qrray) von Zeigern. Ich werde bald eine Antwort schreiben – amanuel2