EVAP-2 IIME-3



Iterator

Un iterador es un objeto que, apuntando a algún elemento en una gama de elementos (tales como una matriz o un contenedor ), tiene la capacidad de iterar a través de los elementos de ese rango utilizando un conjunto de operadores (con al menos el incremento ( + + ) y eliminar la referencia ( * .) operadores) La forma más obvia de iterador es un puntero : Un puntero puede apuntar a elementos de una matriz, y puede recorrer utilizando el operador de incremento ( ++ ). Pero son posibles otros tipos de iteradores. Por ejemplo, cada envase tipo (tal como una lista) Tiene una específica iterador tipo diseñado para recorrer sus elementos. Nótese que mientras que un puntero es una forma de iterador, no todos los iteradores tienen la misma funcionalidad de punteros; Dependiendo de las propiedades soportadas por los iteradores, se clasifican en cinco categorías diferentes:


Categorías de Iterator

Los iteradores se clasifican en cinco categorías en función de la funcionalidad que implementan:
  • Entrada – Salida
  • Adelante
  • Bidireccional
  • De acceso aleatorio
De entrada y salida iteradores son los tipos más limitados de iteradores: pueden realizar operaciones de entrada o salida de un solo paso secuenciales. iteradores Adelante tienen toda la funcionalidad de los iteradores de entrada y -si no son iteradores constantes - también la funcionalidad de iteradores de salida , aunque que se limitan a una dirección en la que para recorrer un rango (hacia adelante). Todos los contenedores estándar soportar al menos hacia delante tipos iterador. iteradores bidireccionales son como iteradores hacia adelante pero también pueden repetirse a través de al revés. iteradores de acceso aleatorio implementar toda la funcionalidad de iteradores bidireccionales , y también tienen la posibilidad de acceder a rangos no secuencialmente: elementos distantes se puede acceder directamente mediante la aplicación de un valor fijo a un iterador sin iteración a través de todos los elementos en el medio. . Estos iteradores tienen una funcionalidad similar a los punteros estándar (punteros son iteradores de esta categoría) Las propiedades de cada categoría iterador son:




categoríapropiedadesexpresiones válidas
todas las categoríascopia Urbanizable , copia asignable y destructibleX b (a);
b = a;
Puede ser incrementado++ Una
a ++
De acceso aleatorioBidireccionalAdelanteEntradaSoporta la igualdad / desigualdad comparacionesa == b
! a = b
Puede ser desreferenciado como rvalue* Un
a-> m
SalidaPuede ser desreferenciado como lvalue
(sólo para tipos de iterador mutables )
* A = t
* a ++ = t
-default construibleX a;
X ()
Multi-pass: ni eliminación de referencias ni todo incremento afecta dereferenceability{B = a; * A ++; * B; }
Se puede disminuir--un
un--
* un--
Soporta los operadores aritméticos + y -a + n
+ n un
a - n
a - b
Soporta comparaciones de desigualdad ( < , > , <= y > = ) entre iteradores<b
a> b
a <= b
a> = b
Soporta operaciones de asignación compuestos + = y - =a + = n
a - = n
Soporta compensar desreferenciar operador ( [] )un [n]

Donde X es un tipo de iterador, un y b son objetos de este tipo iterador, t es un objeto del tipo señalado por el tipo de iterador, y n es un valor entero.



Ejemplos



#include <cstdlib>

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[])


{


vector<char> v;

for (int x = 'A'; x <= 'Z'; x++)
v.push_back(x);

// obtenemos un iterator del tipo char

vector<char>::iterator it;

// lectura y despliegue de datos

cout << "\ndesplegando datos" << endl;
for( it = v.begin(); it != v.end(); it++ )
cout << *it << endl;

system("PAUSE");

return EXIT_SUCCESS;

}

No hay comentarios.:

Publicar un comentario