Koniec iteratora (przynajmniej w przenośni) wskazuje na koniec kontenera tylko za. Prawidłowe elementy w kontenerze przechodzą od *container.begin()
do *container.end()-1
.
Innymi słowy, możesz porównać inny iterator z iteratorem końcowym, aby sprawdzić, czy są równe (co wskazuje, że osiągnąłeś koniec pozycji w pojemniku), ale możesz nie dereferencja, która kończy iterator (tzn. nie możesz próbować uzyskać dostępu do pozycji, do której się odnosi).
Edycja: Przepraszamy, rodzaj błędnie zadającego pytanie: cóż, jeśli pojemnik faktycznie wykorzystał ostatni bajt pamięci (rzadko/mało prawdopodobny, ale teoretycznie możliwy), typowo zobaczysz zawijanie adresu do początku pamięci, zakładając, że był to iterator, który naprawdę działał pod względem adresu, oczywiście. W takim przypadku zazwyczaj zmienia się to w adres 0
, który nadal można odróżnić od dowolnego poprawnego adresu (tj. 0
zostanie przekonwertowany na wskaźnik zerowy, który nie może być prawidłowym wskaźnikiem).
W typowym przypadku jednak jest prawdopodobne, że coś takiego nie byłoby dozwolone. Na przykład w większości 32-bitowych systemów użytkownik jest ograniczony do korzystania z pierwszych 2 lub 3 gigabajtów przestrzeni adresowej, a górne adresy są zarezerwowane dla systemu operacyjnego.
Wskaźnik jest rodzajem iteratora, a nie odwrotnie. –
@BenjaminLindley, czy możesz mi powiedzieć, dlaczego tak jest? Jestem początkującym ... – Kolyunya
Po prostu jestem wybredna. To, do czego dążyłem, to to, że istnieje wiele rodzajów iteratorów, a nie tylko wskaźników. Tak więc nie jest tak, że "iteratory są wskaźnikami". * Niektóre * iteratory są wskaźnikami, a niektóre nie. Teraz rozmowa, "wskaźniki są iteratorami", to prawda, a przynajmniej tak zamierzałem sugerować. Jednak to nie jest prawda. Niektóre wskaźniki nie są iteratorami, niektóre są po prostu używane jako odniesienie. Więc się pomyliłem. –