Partager via


replace_copy

Examine chaque élément d'une plage source et le remplace s'il correspond à un attribut spécifié lors de la copie du résultat dans une nouvelle plage de destination.

template<class InputIterator, class OutputIterator, class Type> 
   OutputIterator replace_copy( 
      InputIterator _First,  
      InputIterator _Last,  
      OutputIterator _Result, 
      const Type& _OldVal,  
      const Type& _NewVal 
   );

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 juste après l'élément final dans la plage depuis laquelle les éléments sont remplacés.

  • _Result
    Un itérateur de sortie pointant vers le premier élément dans la plage de destination où la séquence d'éléments modifiée doit être copiée.

  • _OldVal
    L'ancienne valeur des éléments qui doivent être remplacés.

  • _NewVal
    La nouvelle valeur assignée aux éléments avec l'ancienne valeur.

Valeur de retour

Un itérateur de sortie pointant vers l'élément juste après l'élement final dans la plage de destination où la séquence d'éléments modifiée doit être copiée.

Notes

Les plages source et de destination référencées ne doivent pas se chevaucher et doivent être valides : 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 _Last (–) _First comparaisons d'égalité et au plus _Last (–) _First attributions de nouvelles valeurs.

replace_copy a deux formulaires connexes :

Pour plus d'informations sur le comportement de ces fonctions, consultez Itérateurs vérifiés.

Exemple

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

int main( ) {
   using namespace std;
   vector <int> v1;
   list <int> L1 (15);
   vector <int>::iterator Iter1;
   list <int>::iterator L_Iter1;

   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( ) );

   int iii;
   for ( iii = 0 ; iii <= 15 ; iii++ )
      v1.push_back( 1 );

   cout << "The original vector v1 is:\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Replace elements in one part of a vector with a value of 7
   // with a value of 70 and copy into another part of the vector
   replace_copy ( v1.begin( ), v1.begin( ) + 14,v1.end( ) -15, 7 , 70);

   cout << "The vector v1 with a value 70 replacing that of 7 is:\n ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")." << endl;

   // Replace elements in a vector with a value of 70
   // with a value of 1 and copy into a list
   replace_copy ( v1.begin( ), v1.begin( ) + 14,L1.begin( ), 7 , 1);

   cout << "The list copy L1 of v1 with the value 0 replacing "
        << "that of 7 is:\n ( " ;
   for ( L_Iter1 = L1.begin( ) ; L_Iter1 != L1.end( ) ; L_Iter1++ )
      cout << *L_Iter1 << " ";
   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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ).
The vector v1 with a value 70 replacing that of 7 is:
 ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 1 70 1 9 2 0 70 70 3 4 6 8 5 70 70 1 ).
The list copy L1 of v1 with the value 0 replacing that of 7 is:
 ( 1 1 9 2 0 1 1 3 4 6 8 5 1 1 0 ).

Configuration requise

En-tête : <algorithme>

Espace de noms : std

Voir aussi

Référence

replace_copy (Exemples STL)

Bibliothèque STL (Standard Template Library)