Iteradores de salida (Programación)

Iteradores de salida (Programación)
Información sobre la plantilla
Concepto:Son de movimiento hacia delante y sirven a operaciones de escritura de datos

Iteradores de salida (Programación). (OutputIterator) sirven a operaciones de escritura de datos. El destino de los datos puede ser un contenedor STL; un flujo ("stream"); un contenedor definido por el usuario, etc. Son de escritura y movimiento hacia delante. Esto significa que solo pueden usarse para asignar valores a los miembros de la secuencia, y que solo está permitido con ellos el operador de desplazamiento hacia adelante ++.

Descripción

Un uso típico de estos iteradores es para escribir datos en un contenedor que han sido leídos de otro. Por ejemplo, el siguiente código es un algoritmo genérico que copia el contenido de una secuencia en otra:

template <class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first,
                    InputIterator last,
                    OutputIterator result) {
   while (first != last) *result++ = *first++;
   return result;
}

Comentario

Algunos algoritmos de la STL manejan simultáneamente dos secuencias. Con frecuencia la segunda secuencia es definida solo a través de un iterador (en lugar de utilizar dos para describir un rango), de forma que solo se necesitan tres iteradores para designarlas; un rango para la primera y un valor inicial para la segunda. Las operaciones suponen leer ciertos datos de la primera secuencia, que denominaremos "de entrada", y escribirlos en la segunda, denominada "de salida".

Tipos de iteradores de salida

Lo mismo que con los de entrada, pueden distinguirse varias clases de iteradores de salida.

Punteros ordinarios

Los punteros ordinarios gozan de las propiedades de los iteradores de acceso aleatorio, que son un superconjunto de los punteros de salida. Por ejemplo, el contenido de dos matrices ordinarias puede ser refundido en una sola utilizando un algoritmo estándar:

int datai1[50];
int datai2[50];
int datafin[100];
...
copy (datai1, datai1+50, datafin);
copy (datai2, datai2+50, datafin+50);

Iteradores de salida de contenedor estándar

Todos los iteradores definidos en los contenedores de la STL pueden ser utilizados como iteradores de salida. Ambas premisas permiten escribir un código como el que sigue, en el que una matriz ordinaria es copiada a un contenedor tipo vector mediante un algoritmo genérico:

int data[100];
vector<int> vdata(100);
...
copy (data, data+100, vdata.begin());

Iteradores de inserción

Este tipo de iterador (insert_iterator) se diferencia de los iteradores de salida estándar en que en vez de sustituciones, realiza inserciones en el contenedor de salida. Esto permite efectuar operaciones del tipo realizado por el algoritmo copy en contenedores de longitud variable, tales como listas y sets, al tiempo que permite al programador desentenderse de comprobar que el contenedor de salida es suficiente para albergar el rango de entrada.

Iteradores de flujo de salida

La STL también proporciona iteradores que pueden ser utilizados con flujos de salida. Son los denominados ostream_iterator, que permiten utilizar los algoritmos de la STL que admiten iteradores de salida con los contenedores de flujo de salida basic_ostream.

Puede Consultar

Fuente