replace_copy_if
Examine chaque élément dans une plage source et le remplace le cas d'un attribut spécifié en copiant le résultat dans un nouvel intervalle de destination.
template<class InputIterator, class OutputIterator, class Predicate, class Type>
OutputIterator replace_copy_if(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
Predicate _Pred,
const Type& _Val
);
Paramètres
_First
Un itérateur d'entrée qui pointe vers la position du premier élément dans la plage à partir duquel les éléments sont remplacés._Last
Un itérateur d'entrée qui pointe vers la position une au delà de le dernier élément dans la plage à partir duquel les éléments sont remplacés._Result
Un itérateur de sortie qui pointe vers la position du premier élément de la plage de destination dans lequel les éléments sont copiés._Pred
L'attribut unaire qui doit être satisfaite est la valeur d'un élément doit être remplacé._Val
La nouvelle valeur est assignée aux éléments dont l'ancienne valeur de l'attribut.
Valeur de retour
Un itérateur de sortie qui pointe vers la position une au delà de le dernier élément dans la plage de destination vers laquelle la séquence modifiée d'éléments est copiée.
Notes
La source et les intervalles de destination référencés ne doivent pas se chevaucher et doivent toutes les deux être valides : tous les pointeurs doivent être deréférençables et dans les séquences la dernière position est accessible dès le début par l'augmentation.
L'ordre des éléments non remplacé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 de nouvelles valeurs.
replace_copy_if a deux formes associées :
Pour plus d'informations sur ces fonctions se comportent, consultez Itérateurs vérifiés.
Exemple
// alg_replace_copy_if.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>
bool greater6 ( int value ) {
return value >6;
}
int main( ) {
using namespace std;
vector <int> v1;
list <int> L1 (13);
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 <= 13 ; 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 with a value of 7 in the 1st half of a vector
// with a value of 70 and copy it into the 2nd half of the vector
replace_copy_if ( v1.begin( ), v1.begin( ) + 14,v1.end( ) -14,
greater6 , 70);
cout << "The vector v1 with values of 70 replacing those greater"
<< "\n than 6 in the 1st half & copied into the 2nd half 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_if ( v1.begin( ), v1.begin( ) + 13,L1.begin( ),
greater6 , -1 );
cout << "A list copy of vector v1 with the value -1\n replacing "
<< "those greater than 6 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 ).
The vector v1 with values of 70 replacing those greater
than 6 in the 1st half & copied into the 2nd half is:
( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 70 1 70 2 0 70 70 3 4 6 70 5 70 70 ).
A list copy of vector v1 with the value -1
replacing those greater than 6 is:
( -1 1 -1 2 0 -1 -1 3 4 6 -1 5 -1 ).
Configuration requise
en-tête : <algorithm>
l'espace de noms : DST