2011-03-06 17 views

risposta

35

Se è possibile, trovare e leggere "La libreria standard C++: Un tutorial e una di riferimento". Questo libro contiene un intero capitolo sugli iteratori di STL.

Ecco un po 'di qualcosa dal libro:

Iterator Category Ability       Providers 
----------------- ------------------------------- ---------------------------- 
Input iterator  Reads forward     istream 
Output iterator Writes forward     ostream, inserter 
Forward iterator Reads/writes forward    forward_list, 
                 unordered_[multi]set, 
                 unordered_[multi]map 
Bidirectional it. Reads/writes forward/backward list, [multi]set, [multi]map 
Random access it. Reads/writes with random access vector, deque string, array 
+2

Questo è scaduto ora, in quanto manca di informazioni per C++ 11, ma afaik l'unica modifica rilevante è che ora ci sono contenitori che forniscono iteratori in avanti: 'forward_list',' unordered_set', 'unordered_multiset ',' unordered_map' e 'unordered_multimap'. – Jules

+2

@Jules come è scaduto? Poiché non vengono introdotti nuovi iteratori in C++ 11 e il comportamento dei vecchi iteratori non viene modificato, direi che è piuttosto accurato. Quali contenitori supportano gli iteratori è irrilevante rispetto alla domanda. –

+0

Forse non è stato chiesto specificamente dalla domanda, ma l'informazione è stata inclusa nella risposta, quindi commentare quando è cambiata l'informazione è appropriata. – Jules

15

Lo standard C++ ha anche un concetto di Iterator bidirezionale, che è un Forward Iterator che può anche andare indietro (con operator--). Insieme, questi cinque formano l'intera gerarchia iteratore nel paragrafo 24.2 dello standard C++.

Il vecchio STL aveva anche il concetto di Trivial Iterator. Vedere il suo Iterator overview per i dettagli riguardanti i vari iteratori.

Boost designer Abrahams, Siek e Witt hanno presented un insieme di concetti iteratore molto più granuloso.

+0

downvoted come questo risponde solo la prima delle 4 domande poste su questi tipi. La risposta di @kkunov è molto meglio, IMO, nonostante manchi le informazioni aggiuntive sulle vecchie versioni/boost. – Jules

+0

@Jules È spiacevole che questa risposta sia stata accettata, ma il downvoting non lo classificherà più in basso tra le risposte. –

+1

@Jules Non sono sicuro di quanto gli iteratori di boost siano rilevanti per la domanda, dal momento che l'OP ha chiesto degli iteratori di stl/std. –

6

ho il sospetto si conosce la risposta abbastanza bene, ma in ogni caso, these charts sono molto utili per l'ordinamento questo fuori

+0

lo sospetto anch'io – zkunov