Share via


copy

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 hacia delante.

template<class InputIterator, class OutputIterator> 
   OutputIterator copy( 
      InputIterator _First,  
      InputIterator _Last,  
      OutputIterator _DestBeg 
   );

Parámetros

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

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

  • _DestBeg
    Un iterador de salida que dirige la posición del primer elemento del intervalo 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 _Result + (_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.

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

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

copy tiene dos formatos relacionados:

Para obtener información sobre el comportamiento de estas funciones, vea Iteradores activados.

Ejemplo

// alg_copy.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 the first 3 elements of v1 into the middle of v2
   copy( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 4 );

   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 left
   copy( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 2 );

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

Para otra demostración de ejemplo que muestra cómo usar la copia, vea accumulate, copy y vector::push_back.

  

Resultados

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 0 10 20 10 20 21 24 27 30 )

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Vea también

Referencia

Biblioteca de plantillas estándar