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

copy

 

Publicada: junio de 2016

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


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

_First

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

_Last

Iterador de entrada que direcciona la posición situada una posición después del último elemento del intervalo de origen.

_DestBeg

Iterador de salida que direcciona la posición del primer elemento del intervalo de destino.

Iterador de salida que direcciona la posición situada una posición después del último elemento del intervalo de destino, es decir, el iterador direcciona _Result + (_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.

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

El algoritmo copy 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.

copy tiene dos formatos relacionados:

  • checked_copy

  • unchecked_copy

Para obtener información sobre el comportamiento de estas funciones, consulte 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 ver otro ejemplo que muestra cómo usar copy, consulte accumulate, copy y vector::push_back.

v1 = (0 10 20 30 40 50) v2 = (0 3 6 9 12 15 18 21 24 27 30) v2 con inserción de v1 = (0 3 6 9 0 10 20 21 24 27 30) v2 con inserción desplazada = (0 3 0 10 20 10 20 21 24 27 30)

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

Mostrar: