Iteradores hacia adelante


Este tipo de iteradores ya empieza a parecerse más a un puntero real. Puede realizar la mayoría de las operaciones de los punteros, salvo unas cuantas restricciones:

Estas son los requerimientos de las STL para un iterador hacia adelante:

Si buscamos ejemplos de implementación de este tipo de iteradores dentro de las STL encontraremos que solo se utilizan dentro de las listas. ¿Entonces cual es la función de este tipo de iteradores? Su función es poder escribir algoritmos que funcionen con el mayor número de contenedores posible. Veamos un ejemplo:

template <class ForwardIterator, class T>
void fill(ForwardIterator firts, 
          ForwardIterator last, 
          const T& value)
{
  while( first != last )
    *first++ = value;
}
    

Si hubiesemos escrito este algoritmo utilizando iteradores de más alto nivel, que empleasen por ejemplo el operador [], ya no sería posible emplear este algoritmo con listas, sino sólo con contenedores que proporcionen iteradores de acceso aleatorio.