![]() |
![]() |
![]() |
Hasta ahora hemos visto como los iteradores simulan en mayor o menor grado el comportamieºnto de los punteros. Pero los iteradores de inserción incumplen uno de los principales atributos de los punteros: no sobreescriben la dirección a la que apuntan. Normalmente cuando se asigna un valor a una posición de un contenedor, lo que se hace es sobreescribir dicha posición con un nuevo valor. Sin embargo este tipo de adaptadores de iteradores lo que hacen es insertar el nuevo valor en un nuevo espacio que previamenete no se estaba utilizando.
Hay tres tipos de iteradores de inserción:
front_insert_iterator: añade nuevos elementos a un contenedor utilizando el método push_front(). Sólo puede utilizarse en list<T> y vector<T>.back_insert_iterator: añade nuevos elementos a un contenedor utilizando el método push_back(). Puede utilizarse con los contenedores vector<T>, list<T> y vector<T>.insert_iterator: añade nuevos elementos en cualquiera de un contenedor. Puede emplearse con todos los tipos de contenedores.Como estos iteradores son utilizados frecuentemente como argumentos de funciones, se han creado funciones especiales para poder utiizarlos mas fácilmente:
front_inserter(container&): Esta función crea un iterador de inserción al principio para el contenedor pasado como parámetro. Ejemplo:
copy(mi_vector.begin(), mi_vector.end(),
front_inserter(mi_lista));
back_inserter(container&): crea un iterador de inserción al final para el contenedor pasado como parámetro. Ejemplo:
copy(mi_vector.begin(), mi_vector.end(),
back_inserter(mi_lista));
inserter(container&, iterator i): crea un iterador de inserción en la posicion indicada por el iterador de para el contenedor pasado como parámetro. Ejemplo:
list mi_lista;
list mi_iterador = mi_lista.begin()++;
copy(mi_vector.begin(), mi_vector.end(),
inserter(mi_lista, mi_iterador));