replace_copy_if
Überprüft jedes Element in einem Quellbereich und ersetzt, sofern eines angegebenen Prädikat beim Kopieren des Ergebnisses in einen neuen Zielbereich erfüllt.
template<class InputIterator, class OutputIterator, class Predicate, class Type>
OutputIterator replace_copy_if(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
Predicate _Pred,
const Type& _Val
);
Parameter
_First
Ein Eingabeiterator, der auf der Position des ersten Elements im Bereich zeigt, in dem Elemente ersetzt werden._Last
Ein Eingabeiterator, der auf der Position eine hinter dem letzten Element im Bereich zeigt, in dem Elemente ersetzt werden._Result
Ein Ausgabeiterator, der auf der Position des ersten Elements im Zielbereich zeigt, in dem Elemente kopiert werden._Pred
Das Prädikat, unäre das erfüllt sein muss, ist der Wert eines Elements wird ersetzt werden._Val
Der neue Wert, der an Elemente zugewiesen wird, deren alter Wert das Prädikat erfüllt.
Rückgabewert
Ein Ausgabeiterator, der auf der Position eine hinter dem letzten Element im Zielbereich zeigt auf, der die geänderte Sequenz von Elementen kopiert wird.
Hinweise
Die Quelle und die Zielbereiche, auf die verwiesen werden, dürfen sich nicht überschneiden und müssen beide gültig sein: alle Zeiger müssen dereferenzierbar befinden der Sequenzen ist die letzte Position der ersten von Zunahme erreichbar.
Die Reihenfolge der Elemente, die nicht ersetzt werden, bleibt stabil.
operator==, das verwendet wird, um die Gleichheit zwischen Elementen zu bestimmen, muss eine Äquivalenzrelation zwischen den Operanden verlangen.
Die Komplexität ist linear; es gibt (_Last - _First) Vergleiche auf Gleichheit und höchstens (_Last - _First) Zuweisungen von neuen Werten.
replace_copy_if verfügt über zwei verknüpfte Formulare:
Informationen über das Verhalten dieser Funktionen finden Sie unter Überprüfte Iteratoren.
Beispiel
// 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;
}
Beispielausgabe
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 ).
Anforderungen
Header: <algorithm>
Namespace: std