Partager via


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

Voir aussi

Référence

remove_if (Exemples STL)

Bibliothèque STL (Standard Template Library)