remove_copy
Copie les éléments d'une plage source à une plage de destination, à l'exception de ceux ayant une valeur spécifiée et qui ne sont pas copiés, sans porter atteinte à l'ordre des éléments restants et retournant la fin d'une nouvelle plage de destination.
template<class InputIterator, class OutputIterator, class Type>
OutputIterator remove_copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
const Type& _Val
);
Paramètres
_First
Un itérateur d'entrée qui pointe vers la position du premier élément dans la plage de laquelle les éléments sont remplacés._Last
Un itérateur d'entrée qui pointe vers la position du premier élément dans la plage de laquelle les éléments sont remplacés._Result
Un itérateur d'entrée qui pointe vers la position du premier élément dans la plage de laquelle les éléments sont remplacés._Val
La valeur qui sera supprimée de la plage.
Valeur de retour
Un itérateur adressant par progression la nouvelle position finale de la plage de destination, une après l'élément final de la copie de la séquence restante exempte de la valeur spécifiée.
Notes
Les plages source et destinaire référencées doivent être valides ; tous les pointeurs doivent être deréférençables et, dans la séquence, la dernière position doit être accessible à partir de la première par incrémentation.
Il doit y avoir suffisamment d'espace dans la plage de destination pour contenir les éléments restant qui seront copiés après que les éléments de la valeur spécifiée soient supprimés.
L'ordre des éléments non remplacés reste stable.
L'operator== utilisé pour déterminer l'égalité entre les éléments doit appliquer une relation d'équivalence entre ses opérandes.
La complexité est linéaire : il y a des comparaisons _Last (–)_Firstpour l'égalité et au plus_Last (–)_First affectations.
remove_copy a deux formulaires connexes :
Pour plus d'informations sur le comportement de ces fonctions, consultez Itérateurs vérifiés.
Exemple
// alg_remove_copy.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
using namespace std;
vector <int> v1, v2(10);
vector <int>::iterator Iter1, Iter2, new_end;
int i;
for ( i = 0 ; i <= 9 ; i++ )
v1.push_back( i );
int ii;
for ( ii = 0 ; ii <= 3 ; ii++ )
v1.push_back( 7 );
random_shuffle (v1.begin( ), v1.end( ) );
cout << "The original vector v1 is: ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Remove elements with a value of 7
new_end = remove_copy ( v1.begin( ), v1.end( ), v2.begin( ), 7 );
cout << "Vector v1 is left unchanged as ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
cout << "Vector v2 is a copy of v1 with the value 7 removed:\n ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")." << endl;
}
Résultat de l'exemple
The original vector v1 is: ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
Vector v1 is left unchanged as ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
Vector v2 is a copy of v1 with the value 7 removed:
( 1 9 2 0 3 4 6 8 5 0 ).
Configuration requise
En-tête : <algorithme>
Espace de noms : std