2011-03-06 12 views

Respuesta

35

Si es posible, encontrar y leer "La biblioteca C++ estándar: Un tutorial y referencia". Este libro contiene un capítulo completo sobre los iteradores STL.

Aquí es un poco de algo del 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

Esto está desactualizado ahora, ya que carece de información para C++ 11, pero afaik el único cambio relevante es que ahora hay contenedores que proporcionan iteradores de reenvío: 'forward_list',' unordered_set', 'unordered_multiset ',' unordered_map' y 'unordered_multimap'. – Jules

+2

@Jules ¿cómo está esto desactualizado? Como no se introducen nuevos iteradores en C++ 11 y no se cambia el comportamiento de los iteradores anteriores, diría que es bastante preciso. Qué contenedores admiten qué iteradores es irrelevante para la pregunta. –

+0

Tal vez la pregunta no lo haya preguntado específicamente, pero la información se incluyó en la respuesta, por lo que es apropiado comentar cuándo esa información ha cambiado. – Jules

15

El estándar C++ también tiene un concepto de iterador bidireccional, que es un iterador directo que también puede retroceder (con operator--). Juntos, estos cinco forman toda la jerarquía de iteradores en el párrafo 24.2 del estándar de C++.

El viejo STL también tenía el concepto de Trivial Iterator. Consulte su Iterator overview para obtener detalles sobre los diversos iteradores.

Los diseñadores de Boost Abrahams, Siek y Witt tienen presented un conjunto mucho más detallado de conceptos de iterador.

+0

downvoted ya que esto responde sólo la primera de las 4 preguntas planteadas acerca de estos tipos. La respuesta de @ zkunov es mucho mejor, IMO, a pesar de carecer de la información adicional sobre las versiones anteriores/boost. – Jules

+0

@Jules Desafortunadamente, esta respuesta fue aceptada, pero la devaluación no la clasificará entre las respuestas. –

+1

@Jules No estoy seguro de cómo los iteradores de impulso son relevantes para la pregunta, ya que el OP preguntó acerca de stl/std iterators. –

6

sospecho que sabes la respuesta bastante bien, pero de todos modos, these charts son muy útiles para solucionar esto

+0

sospecho que también – zkunov

Cuestiones relacionadas