Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés
Se recomienda usar Visual Studio 2017

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
);

_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.

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 ).

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;
}

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

Mostrar: