Un iteratore di fine (almeno in senso figurato) punta solo a oltre il alla fine del contenitore. Gli articoli validi nel contenitore vanno da *container.begin()
a *container.end()-1
.
In altre parole, è possibile confrontare qualche altro iteratore per l'iteratore fine per vedere se they'r uguale (che ti dice che hai raggiunto la fine degli elementi del contenitore), ma si può non dereferenziamento che termina l'iteratore (cioè, non devi tentare di accedere ad un oggetto a cui si riferisce).
Modifica: Scusa, ho capito male la domanda: beh, se il contenitore ha effettivamente utilizzato l'ultimo byte di memoria (raro/improbabile, ma teoricamente possibile) di solito vedresti l'indirizzo avvolgere all'inizio della memoria, presumendo che fosse un iteratore che funzionava davvero in termini di indirizzo, ovviamente. In tal caso, di solito lo vedi trasformarsi in un indirizzo 0
, che può ancora essere distinto da qualsiasi indirizzo valido (ad esempio, 0
verrà convertito in un puntatore nullo, che non può essere un puntatore valido).
In un caso tipico, tuttavia, è probabile che una cosa del genere non possa accadere. Ad esempio, nella maggior parte dei sistemi a 32 bit, l'utente è limitato all'utilizzo dei primi 2 o 3 gigabyte di spazio degli indirizzi e gli indirizzi superiori sono riservati per il sistema operativo.
fonte
2012-12-15 23:02:26
Un puntatore è un tipo di iteratore, non il contrario. –
@BenjaminLindley puoi dirmi perché è così? Sono alle prime armi ... – Kolyunya
Sono solo pignolo. Quello che stavo ottenendo è che ci sono molti tipi di iteratori, non solo puntatori. Quindi non è il caso che "gli iteratori sono puntatori". * Alcuni iteratori sono puntatori e altri no. Ora, al contrario, "i puntatori sono iteratori", questo è vero, o almeno, è ciò che intendevo implicare. Tuttavia, questo in realtà non è vero. Alcuni indicatori non sono iteratori, alcuni sono solo usati come un tipo di riferimento. Quindi mi sono sbagliato. –