Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


5.1.2d  Iteradores bidireccionales

§1  Sinopsis

Los iteradores bidireccionales (BidirectionalIterator) son similares a los iteradores adelante en que combinan las características de los iteradores de entrada y de salida, y en que pueden ser utilizados para lectura y escritura de datos en el contenedor asociado. Pero permiten movimientos en ambas direcciones, de forma que pueden utilizarse con ellos los operadores ++ y --.

§2  Descripción

Un ejemplo de utilización de estos iteradores lo encontramos en el algoritmo reverse_copy(). Este algoritmo es similar a la función copy() comentada anteriormente ( 5.1.2b), pero utiliza la capacidad de desplazamiento descendente de la secuencia de salida para copiar los elementos de un contenedor a otro invirtiendo su orden original.  El su prototipo es el siguiente:

template <class BidirectionalIterator, class OutputIterator>
   OutputIterator reverse_copy (

                  BidirectionalIterator first,
                  BidirectionalIterator last,
                  OutputIterator result) {
      while (first != last) *result++ = *--last;
      return result;
}


La secuencia de entrada está representada por el rango [first, last), y como ocurre en este tipo de operaciones, el elemento señalado por last no es incluido en el proceso de copia. Los miembros señalados por el rango de entrada son copiados en el contenedor de salida a partir de la posición señalada por result.

A continuación se muestra el código utilizado para copiar en orden inverso el contenido de una lista enlazada cList en un contenedor cVec tipo vector:

list<int> cList;
...
vector<int> cVec (cList.size());     // L.3:
reverse_copy (cList.begin(), cList.end(), cVec.begin() );

Observe que la sentencia L3 crea el contenedor cVec con tamaño suficiente para albergar el contenido de la lista cList.