Partager via


remove_copy_if

Copie les éléments d'une plage source à une plage de destination, à l'exception de celle vérifiant un attribut 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 Predicate> 
   OutputIterator remove_copy_if( 
      InputIterator _First,  
      InputIterator _Last,  
      OutputIterator _Result, 
      Predicate _Pred 
   );

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.

  • _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 adressant par progression la nouvelle position finale de la plage de destination, une après l'élément final de la séquence restante exempte des éléments qui répondent au prédicat.

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.

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 existe des comparaisons _Last (–)_Firstpour l'égalité et au plus_Last (–)_Firstaffectations.

remove_copy_if a deux formulaires connexes :

Pour plus d'informations sur le comportement de ces fonctions, 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 : <algorithme>

Espace de noms : std

Voir aussi

Référence

remove_copy_if (Exemples STL)

Bibliothèque STL (Standard Template Library)