remove_copy_if
Copie des éléments d'une plage source à une plage de destination, sauf que satisfaite un attribut ne sont pas copiés, sans toucher à l'ordre des éléments restants et retourner la fin d'un nouvel intervalle de destination.
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator remove_copy_if(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
Predicate _Pred
);
Paramètres
_First
Un itérateur d'entrée adressant la position du premier élément dans la plage à partir duquel les éléments sont supprimés._Last
Un itérateur d'entrée adressant une position au delà de le dernier élément dans la plage à partir duquel les éléments sont supprimés._Result
Un itérateur de sortie adressant la position du premier élément de la plage de destination dans lequel les éléments sont supprimés._Pred
L'attribut unaire qui doit être satisfaite est la valeur d'un élément doit être remplacé.
Valeur de retour
Un itérateur vers l'avant adressant la nouvelle position de fin de la plage de destination, une au delà de le dernier élément de la séquence de reste exempte des éléments satisfaite l'attribut.
Notes
La plage source référencé doit être valide ; tous les pointeurs doivent être deréférençables et dans la séquence la dernière position est accessible dès le début par l'augmentation.
Il doit y avoir suffisamment d'espace dans la plage de destination pour contenir les éléments de reste qui seront copiés après que les éléments de la valeur spécifiée sont supprimés.
L'ordre des éléments non supprimés reste stable.
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 existe_Last (–) _Firstles comparaisons d'égalité et au plus (_Last – _First) des assignations.
remove_copy_if a deux formes associées :
Pour plus d'informations sur ces fonctions se comportent, consultez Itérateurs vérifiés.
Exemple
// alg_remove_copy_if.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>
bool greater6 ( int value ) {
return value >6;
}
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 greater than 6
new_end = remove_copy_if ( v1.begin( ), v1.end( ),
v2.begin( ), greater6 );
cout << "After the appliation of remove_copy_if to v1,\n "
<< "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 values greater "
<< "than 6 removed:\n ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != new_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 ).
After the appliation of remove_copy_if to v1,
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 values greater than 6 removed:
( 1 2 0 3 4 6 5 ).
Configuration requise
en-tête : <algorithm>
l'espace de noms : DST