Introducción a Iterator en C ++

Recorrer sus datos altamente complejos almacenados en diferentes tipos de contenedores, como una matriz, un vector, etc., en el menor tiempo de ejecución es posible debido al iterador en C ++, un componente de la biblioteca de plantillas estándar (STL). No se preocupe, es solo un puntero como un objeto, pero es inteligente porque no importa qué contenedor esté utilizando, hará que su algoritmo sea independiente del tipo de contenedor al proporcionar una interfaz común para todos los tipos de contenedores como un puente entre algoritmo y contenedor. Iterator no solo reduce la complejidad de un programa sino que hace que el tiempo de ejecución sea mucho más rápido.

Por ejemplo, el algoritmo sort () que tiene dos parámetros, el iterador de finalización y de inicio realizará la clasificación en orden independientemente del tipo de contenedor que esté utilizando. Iterator permite la aplicación de algoritmos genéricos a estructuras de datos. Las estructuras de datos pueden usar un iterador para exponer una variedad de elementos.

Operaciones usando el iterador

  • begin (): esta función devolverá un iterador que apunta al primer elemento del contenedor.
  • end (): esta función devolverá un iterador que señala al pasado el último elemento del contenedor.
  • advance (): esta función incrementará una posición de iterador al argumento especificado.
  • next (): Esta función devolverá el nuevo iterador que será señalado por el iterador después de incrementar las posiciones en los argumentos.
  • previous (): esta función devolverá el nuevo iterador que será señalado por el iterador después de disminuir las posiciones en los argumentos.
  • inserter (): esta función insertará el elemento en cualquier posición del contenedor.

Implementación práctica

1. Código C ++ para implementar el iterador

Código

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
std::vector v(1, 2, 3, 4, 5, 6, 7);
//Declaring Iterator
vector::iterator i;
//Function for iterating through vector elements
for(i=v.begin();i!=v.end();i++)
(
std::cout << *i <<" ";
)
return 0;
)

Salida:

2. Código C ++ para mostrar la funcionalidad del iterador

Código

#include
#include
#include
using namespace std;
int main()
(
//Declaring a Vector
vector v(1, 2, 3, 4, 5, 6, 7, 8);
//Declaring Iterator
vector::iterator i;
//Function
v.insert(v.begin()+1, 10);
for(i=v.begin();i!=v.end();i++) (
cout << *i <<" ";
)
return 0;
)

Salida:

Categorías de iteradores

A partir de C ++ 17, hay 5 tipos diferentes de iteradores que se pueden clasificar según el tipo de funcionalidad como se muestra en el diagrama de flujo a continuación:

  • Input Iterator (stdin) : debido a la funcionalidad limitada, son los más débiles de todos los iteradores con funcionalidad de solo lectura y avance. No puede modificar el valor del contenedor. El operador de desreferencia (*), el operador no igual (! =), El operador de incremento (++) y el operador igual (==) se pueden usar como iteradores de entrada. También para operaciones de entrada secuencial.
  • Output Iterator (stdout): Iterador solo para almacenar, iterador de solo escritura que se utiliza para modificar el valor de un contenedor. También tienen una funcionalidad muy limitada. Iterator no puede acceder al elemento. El operador de asignación (=) y el operador de incremento (++) se pueden usar como iteradores de salida. Solo en un algoritmo de un solo paso.
  • Reenviar iterador (lista individualmente vinculada): este iterador contiene la funcionalidad de los iteradores de entrada y salida. Puede avanzar en dirección con un paso a la vez. Para leer y escribir en un contenedor, es el iterador más preferido que admite la reutilización y el almacenamiento. Es compatible con todos los operadores anteriores.
  • Iterador bidireccional (lista doblemente enlazada): como el nombre ya sugiere bidireccional, lo que lo hace más fuerte que los iteradores anteriores. También es compatible con la lectura y escritura en un contenedor. Es compatible con el operador de disminución (-).
  • Iterador de acceso aleatorio (matrices): el iterador más fuerte es el iterador más poderoso, ya que puede leer, escribir y puede acceder aleatoriamente. Puntero como funcionalidad como el puntero suma y resta.

Ventajas de Iterator en C ++

Si necesita moverse de un elemento, ese iterador apunta actualmente a otro elemento que está potencialmente a unos pasos de su iterador actual. Los primeros cuatro en la jerarquía tomarán una cantidad de tiempo lineal para hacerlo, mientras que un iterador de acceso aleatorio puede hacerlo en tiempo constante y eso es mucho más fascinante porque es donde se ahorra tiempo. Es la característica más importante que proporciona un iterador. Algunos más se mencionan a continuación.

  • Eficiencia del código: si tenemos P tipos de contenedores de datos y Q cosas que queremos hacer con ellos, terminaremos escribiendo algoritmos P * Q. Si los datos también son de diferentes tipos R, entonces podríamos terminar con el algoritmo P * Q * R. Entonces, al usar los iteradores, podemos hacerlo en el algoritmo P + Q. Ahorramos el 90% del tiempo y el trabajo. Llevando la eficiencia del código al siguiente nivel. El concepto detrás de la eficiencia es que el iterador de entrada sobre el origen y el iterador de salida sobre la secuencia de destino no necesitan ser del mismo tipo.
  • Procesamiento dinámico: los iteradores tienen funcionalidades dinámicas como el intercambio en el mismo contenedor, Asignación de copia, incremento, eliminación de referencias y decremento. El iterador proporciona la funcionalidad para eliminar y agregar elementos dinámicamente al contenedor. Como todos los iteradores pueden incrementarse, los iteradores de entrada pueden compararse y desreferenciarse a un valor. Los iteradores bidireccionales se pueden disminuir. El aspecto principal es escribir una función y usarla para cualquier contenedor.

Desventajas de Iterator en C ++

  • No puede pasar de una estructura de datos a otra al mismo tiempo de una manera compleja. Iterator no funcionará en ese caso.
  • Si está procesando a través de una lista y olvidó algo y ahora desea regresar, entonces no puede porque los iteradores no funcionarán de esa manera.
  • En caso de que necesite actualizar la estructura durante el desplazamiento, no puede hacerlo también debido a la forma iterativa de almacenar su posición.

Conclusión

Al usar iteradores, tenga siempre en cuenta estas dos cosas para hacer que el código sea eficiente. Pase siempre el iterador a una función en lugar de contenedores. Nunca debe devolver contenedores en lugar de devolver o pasar el iterador. Puede obtener cualquier elemento utilizando un iterador, desreferenciar y pasar un par del iterador a un algoritmo

Artículos recomendados

Esta es una guía para el iterador en C ++. Aquí discutimos operaciones en el iterador, categorías, ventajas y desventajas con códigos y salidas. También puede consultar nuestros otros artículos relacionados para obtener más información.

  1. Matrices en C ++
  2. ¿Qué es C ++?
  3. Funciones de matriz de C ++
  4. Bucles en C ++
  5. Funciones de matriz PHP | Tipos de funciones de matriz en PHP