De programación c ++: hacer su camino a través de una lista

Video: 106. Programación en C++ || Listas || Buscar un elemento en una lista enlazada

El C ++ itera programador a través de una matriz, proporcionando el índice de cada elemento. Sin embargo, esta técnica no funciona para contenedores como lista que no permiten el acceso aleatorio. Uno podría imaginar una solución basada en métodos tales como GetFirst () y getNext ()- Sin embargo, los diseñadores de la Biblioteca de plantillas estándar querían proporcionar un método común para atravesar cualquier tipo de recipiente.

Para ello, la Biblioteca de plantillas estándar define el iterador.

Un iterador es un objeto que apunta a los miembros de un contenedor. En general, cada iterador es compatible con las siguientes funciones:

Video: 103. Programación en C++ || Listas || Concepto de Lista Enlazada

  • Una clase puede devolver un iterador que apunta al primer elemento de la colección.

  • El iterador se puede mover de un miembro a otro.

    Video: Cómo implementar una lista en C - parte I

  • El iterador devuelve una indicación cuando se alcanza el final de la lista.

  • El programa puede recuperar el elemento apuntado por el iterador.

La Biblioteca de plantillas estándar también proporciona iteradores inversa para mover hacia atrás a través de listas. Todo aquí sobre iteradores se aplica por igual a los iteradores inversa.

El código necesario para iterar a través de una lista es diferente de la necesaria para atravesar una vector (por poner sólo dos ejemplos). Sin embargo, el iterador esconde estos detalles.

El método empezar() un iterador que apunta al primer elemento de una lista. el direccionamiento indirecto operador*() recupera una referencia al objeto apuntado por el iterador. los ++ operador mueve el repetidor al siguiente elemento de la lista.

Un programa continúa para incrementar su camino a través de la lista hasta el iterador es igual al valor devuelto por fin(). El siguiente fragmento de código comienza al principio de una lista de estudiantes y muestra cada uno de sus nombres:

displayStudents void (lista& estudiantes) {// asignar un iterador que apunta al primer elemento // en el listlist:: iter iterador = students.begin () - (! Iter = students.end ()) // siguen bucle a través de la lista hasta que la // iterador llega al final de la listwhile {// recuperar el estudiante los puntos de iterador atStudent& s = * iter-cout lt; lt; s.sName lt; lt; endl - // ahora mover el iterador sobre al siguiente elemento // en el listiter ++ -}}

Declaraciones para iteradores puede ser muy compleja. Esta es probablemente la mejor justificación de la auto Declaración introducido con la norma `11:

para (auto iter = students.begin () - iter = students.end (!) - iter ++) {cout lt; lt; iter-gt; sName lt; lt; endl-}

esto declara iter ser un iterador de cualquier tipo es devuelto por el método lista::empezar(), evitando las declaraciones torturados que se muestran en el fragmento de código anterior. ¡Cuan genial es eso!

Artículos Relacionados