Está en la página 1de 7

ITERADORES

Presentado por: Angy Lizeth Salazar Morales


Ivan Colmenares
Un iterador es un puntero que es utilizado por un algoritmo para recorrer los
elementos almacenados en un contenedor.
Dado que los distintos algoritmos necesitan recorrer los contenedores de
diversas maneras para realizar diversas operaciones, y los contenedores
deben ser accedidos de formas distintas, existen diferentes tipos de
iteradores. Cada contenedor de la Librería Estándar puede generar un
iterador con funcionalidad adecuada a la técnica de almacenamiento que
utiliza. Es precisamente el tipo de iterador requerido como argumento, lo que
distingue qué algoritmos STL pueden ser utilizados con cada clase de
contenedor. Por ejemplo, si un contenedor solo dispone de iteradores de
acceso secuencial, no pueden utilizarse con algoritmos que exijan iteradores
de acceso aleatorio.
La clase iterator
La sentencia anterior, donde se declara un iterador iT1 de la clase vector<int> es
fundamental para entender la naturaleza de los iteradotes
std::vector<int>::iterator iT1;
Esta sentencia instancia un objeto iT1 de la clase iterator que pertenece al espacio de una
instanciación concreta, vector<int>, de una clase genérica vector<T>. La clase iterator
para vectores-de-int está definida en el ámbito de la clase genérica vector<T>. Es decir, la
definición del contenedor vector es algo como:
template <class T, ...> vector {
public:
class iterator;
};
A su vez esta clase iterator debe dispone de su propia definición en algún punto de la
cabecera <vector>:
class vector<T>::iterator {
/* definición dependiente de la implementación */ };
Características
Existen diversas características principales que distinguen unos iteradores de otros.
Podemos resumirlas como sigue:
Capacidad de modificar los datos subyacentes. En este sentido pueden ser de solo lectura;
solo escritura, o lectura/escritura.
Tipo de desplazamiento que puede realizarse con ellos para recorrer el contenedor. Puede
ser de avance secuencial; avance y retroceso secuencial, o acceso aleatorio.
Otras características adicionales. Por ejemplo, la posibilidad de ser utilizados por
algoritmos que permiten insertar o borrar elementos del contenedor asociado.
Categorías
El estándar distingue cinco variedades de iteradores (denominadas categorías) en
función de algunas de las características antes enunciadas:
Corresponden al esquema de la figura adjunta y responden las definiciones
siguientes:
struct InputIterator { ... };
struct OutputIterator { ... };
struct FordwarIterator : public InpuptIterator { ... };
struct BidirectionalIterator : public FordwardIterator { ... };
struct RandomAccessIterator : public BidirectionalIterator { ... };