remove_copy

Copie des éléments d'une plage source à une plage de destination, sauf que les éléments d'une valeur spécifiée 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 Type>
   OutputIterator remove_copy(
      InputIterator _First, 
      InputIterator _Last, 
      OutputIterator _Result,
      const Type& _Val
   );

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.

  • _Val
    La valeur qui doit être supprimée de la plage.

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 copie de la séquence de reste exempte de la valeur spécifiée.

Notes

La source et les intervalles de destination référencés doivent être valides ; 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 a deux formes associées :

Pour plus d'informations sur ces fonctions se comportent, consultez Itérateurs vérifiés.

Exemple

// alg_remove_copy.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

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 of 7
   new_end = remove_copy ( v1.begin( ), v1.end( ), v2.begin( ), 7 );

   cout << "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 the value 7 removed:\n ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.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 ).
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 the value 7 removed:
 ( 1 9 2 0 3 4 6 8 5 0 ).

Configuration requise

en-tête : <algorithm>

l'espace de noms : DST

Voir aussi

Référence

remove_copy (STL Samples)

Modèles Standard