Compartir a través de


copy_backward

Asigna los valores de elementos de un intervalo de origen a un rango de destino, iterando con la secuencia de origen de elementos y asignándoles nuevas posiciones en una dirección inversa.

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

Parámetros

  • _First
    Un iterador bidireccional que dirige la posición del primer elemento del intervalo de origen.

  • _Last
    Un iterador bidireccional que dirige la posición que es una más allá del último elemento en el intervalo de origen.

  • _DestEnd
    Un iterador bidireccional que dirige la posición que está más allá del último elemento en el rango de destino.

Valor devuelto

Un iterador de salida que dirige la posición que es una más allá del último elemento en el rango de destino, es decir, el iterador dirige *_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 copian.

El algoritmo de copy_backward impone requisitos más rigurosos que esos el algoritmo de copia.Tanto los iteradores de entrada y salida deben ser bidireccionales.

El algoritmo de copy_backward es el único algoritmo de la biblioteca de plantillas estándar que designa el rango de salida con un iterador que señala al final del intervalo de destino.

Puesto que el algoritmo copia los elementos de origen en orden a partir del último elemento, el intervalo de destino puede superponer con el intervalo de origen proporcionado a la posición de _First de intervalo de origen no está contenido en el rango de destino.copy_backward se puede utilizar para mover elementos a la derecha pero no a la izquierda, a menos que no haya superposición entre el origen y los rangos de destino.Para desplazarse a la izquierda cualquier número de posiciones, use el algoritmo de copia .

El algoritmo de copy_backward modificar únicamente los valores indicada por los iteradores, asignando valores nuevos elementos en el intervalo de destino.No se puede utilizar para crear nuevos elementos y no puede insertar elementos en un contenedor vacío directamente.

copy_backward tiene dos formularios relacionados:

Para obtener información sobre cómo estas funciones se comportan, vea Iteradores comprobados.

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

Output

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: <algoritmo>

espacio de nombres: std

Vea también

Referencia

Biblioteca de plantillas estándar