remove_if
Supprime les éléments qui satisfont un attribut d'un intervalle spécifié sans toucher à l'ordre des éléments restants et retourner 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 vers l'avant pointant vers la position du premier élément dans la plage à partir duquel les éléments sont supprimés._Last
Un itérateur vers l'avant pointant sur une position au delà de le dernier élément dans la plage à partir duquel 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 modifié, une au delà de le dernier élément de la séquence de reste exempte de la valeur spécifiée.
Notes
l'intervalle 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.
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é.
La liste est supprimer une version plus efficace de fonction membre de qui reconnecte des 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 : <algorithm>
l'espace de noms : DST