copy
Assigne les valeurs des éléments d'une plage source à une plage de destination, itérant au sein de la séquence source d'éléments et leur assigner de nouvelles positions dans une direction en avant.
template<class InputIterator, class OutputIterator>
OutputIterator copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _DestBeg
);
Paramètres
_First
Un itérateur d'entrée adressant la position du premier élément de la plage source._Last
Un itérateur d'entrée adressant la position qui est une au delà de le dernier élément dans la plage source._DestBeg
Un itérateur de sortie adressant la position du premier élément de la plage de destination.
Valeur de retour
Un itérateur de sortie adressant la position qui est une au delà de le dernier élément dans la plage de destination, c. autrement dit., l'itérateur adresse _Result + (_Last – _First ).
Notes
La plage source doit être valide et il doit y avoir suffisamment d'espace à la destination pour contenir tous les éléments sont copiés.
Étant donné que l'algorithme copie les éléments source dans le début de commande avec le premier élément, la plage de destination peut se chevaucher avec la plage source fourni la position d' _Last de la plage source n'est pas contenu dans la plage de destination.copy peut être utilisé pour déplacer des éléments à gauche mais pas le droit, à moins qu'il n'y a aucun chevauchement entre la source et les intervalles de destination.Pour déplacer vers la droite plusieurs emplacements, utilisez l'algorithme de copy_backward .
L'algorithme de copy modifie uniquement des valeurs vers pointées par les itérateurs, d'assigner de nouvelles valeurs aux éléments dans la plage de destination.Il ne peut pas être utilisé pour créer de nouveaux éléments et ne peut pas insérer des éléments dans un conteneur vide directement.
copy a deux formes associées :
Pour plus d'informations sur ces fonctions se comportent, consultez Itérateurs vérifiés.
Exemple
// 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;
}
Pour une autre aspect d'exemple comment utiliser la copie, consultez l' accumulate, copy, et vector::push_back.
Sortie
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 )
Configuration requise
en-tête : <algorithm>
l'espace de noms : DST