remove_if
Élimine d'une plage donnée les éléments qui répondent à un prédicat, sans modifier l'ordre des éléments restants et en retournant la fin d'une nouvelle plage exempte de la valeur spécifiée.
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator _First,
ForwardIterator _Last,
Predicate _Pred
);
Paramètres
_First
Un itérateur incrémentable qui pointe vers la position du premier élément dans la plage de laquelle les éléments sont remplacés._Last
Un itérateur incrémental qui pointe vers la position du premier élément dans la plage de laquelle les éléments sont remplacés._Pred
L'attribut unitaire qui doit être satisfait est la valeur d'un élément qui doit être remplacé.
Valeur de retour
Un itérateur incrémantal qui pointe vers la nouvelle position finale de la plage modifiée, une après l'élément final de la séquence restante exempte de la valeur spécifiée.
Notes
La plage source triée référencée doit être valide ; 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.
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 existe une comparaison _Last (–)_Firstpour l'égalité.
La liste de suppression a une version plus efficace de fonctions membres de suppression de qui reconnecte les pointeurs.
Exemple
// alg_remove_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;
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 << "Vector v1 is ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Remove elements satisfying predicate greater6
new_end = remove_if (v1.begin( ), v1.end( ), greater6 );
cout << "Vector v1 with elements satisfying greater6 removed is\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// To change the sequence size, use erase
v1.erase (new_end, v1.end( ) );
cout << "Vector v1 resized elements satisfying greater6 removed is\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
}
Résultat de l'exemple
Vector v1 is ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
Vector v1 with elements satisfying greater6 removed is
( 1 2 0 3 4 6 5 3 4 6 8 5 7 7 ).
Vector v1 resized elements satisfying greater6 removed is
( 1 2 0 3 4 6 5 ).
Configuration requise
En-tête : <algorithme>
Espace de noms : std