copy_backward

Asigna los valores de elementos de un intervalo de origen a un intervalo de destino, recorriendo en iteración la secuencia de origen de elementos y asignándoles nuevas posiciones en una dirección hacia atrás.

template<class BidirectionalIterator1, class BidirectionalIterator2> 
   BidirectionalIterator2 copy_backward( 
      BidirectionalIterator1 _First,  
      BidirectionalIterator1 _Last, 
      BidirectionalIterator2 _DestEnd 
   );

Parámetros

  • _First
    Iterador bidireccional que direcciona la posición del primer elemento del intervalo de origen.

  • _Last
    Iterador bidireccional que direcciona la posición situada un elemento más allá del último elemento del intervalo de origen.

  • _DestEnd
    Iterador bidireccional que direcciona la posición de un elemento más allá del último elemento del intervalo de destino.

Valor devuelto

Iterador de salida que direcciona la posición situada un elemento más allá del último elemento del intervalo de destino, es decir, el iterador direcciona _DestEnd – (_Last – _First ).

Comentarios

El intervalo de origen debe ser válido y debe haber suficiente espacio en el destino para contener todos los elementos que se van a copiar.

El algoritmo copy_backward impone requisitos más rigurosos que los del algoritmo de copia. Tanto sus iteradores de entrada como de salida deben ser bidireccionales.

Los algoritmos copy_backward y move_backward son los únicos algoritmos de la Biblioteca de plantillas estándar que designan el intervalo de salida con un iterador que apunta al final del intervalo de destino.

Puesto que el algoritmo copia los elementos de origen por orden a partir del último elemento, el intervalo de destino puede superponerse al intervalo de origen siempre y cuando la posición _First del intervalo de origen no esté contenida en el intervalo de destino. Se puede utilizar copy_backward para desplazar elementos hacia la derecha pero no hacia la izquierda, a menos que no haya superposición entre los intervalos de origen y de destino. Para desplazarse a la izquierda cualquier número de posiciones, use el algoritmo copy.

El algoritmo copy_backward solo modifica los valores a los que apuntan los iteradores, asignando nuevos valores a los elementos del intervalo de destino. No se puede utilizar para crear elementos nuevos y no puede insertar elementos en un contenedor vacío directamente.

Ejemplo

// alg_copy_bkwd.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
   using namespace std;
   vector <int> v1, v2;
   vector <int>::iterator Iter1, Iter2;

   int i;
   for ( i = 0 ; i <= 5 ; ++i )
      v1.push_back( 10 * i );

   int ii;
   for ( ii = 0 ; ii <= 10 ; ++ii )
      v2.push_back( 3 * ii );

   cout << "v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; ++Iter1 )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   cout << "v2 = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   // To copy_backward the first 3 elements of v1 into the middle of v2
   copy_backward( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 7 );

   cout << "v2 with v1 insert = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   // To shift the elements inserted into v2 two positions
   // to the right
   copy_backward( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 9 );

   cout << "v2 with shifted insert = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; ++Iter2 )
      cout << *Iter2 << " ";
   cout << ")" << endl;
}

Salida

v1 = ( 0 10 20 30 40 50 )
v2 = ( 0 3 6 9 12 15 18 21 24 27 30 )
v2 with v1 insert = ( 0 3 6 9 0 10 20 21 24 27 30 )
v2 with shifted insert = ( 0 3 6 9 0 10 0 10 20 27 30 )

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Vea también

Referencia

move_backward

Biblioteca de plantillas estándar