remove_copy_if
Kopiert Elemente aus einem Quellbereich einem Zielbereich, außer dass, ein Prädikat zufrieden stellend, werden kopiert, nicht, ohne die Reihenfolge der restlichen Elemente zu beeinträchtigen und Ende eines neuen Zielbereichs zurückzugeben.
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator remove_copy_if(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
Predicate _Pred
);
Parameter
_First
Ein Eingabeiterator, der die Position des ersten Elements im Bereich behandelt, in dem Elemente entfernt werden._Last
Ein Eingabeiterator, der die Position eine hinter dem letzten Element im Bereich behandelt, in dem Elemente entfernt werden._Result
Ein Ausgabeiterator, der die Position des ersten Elements im Zielbereich behandelt, auf dem Elemente entfernt werden._Pred
Das Prädikat, unäre das erfüllt sein muss, ist der Wert eines Elements wird ersetzt werden.
Rückgabewert
Ein Vorwärtsiterator, der die neue Endposition des Zielbereichs, eine hinter dem letzten Element der Restsequenz frei von Elementen das Prädikat erfüllen.
Hinweise
Der Quellbereich, auf den verwiesen wird, gültig sein; muss alle Zeiger müssen dereferenzierbar befinden der Sequenz ist die letzte Position der ersten von Zunahme erreichbar.
Es muss genügend Speicherplatz im Zielbereich geben, um die Restelemente enthalten, die kopiert werden, nachdem Elemente des angegebenen Werts entfernt sind.
Die Reihenfolge der Elemente, die nicht entfernt 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.
remove_copy_if verfügt über zwei verknüpfte Formulare:
Informationen über das Verhalten dieser Funktionen finden Sie unter Überprüfte Iteratoren.
Beispiel
// 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;
}
Beispielausgabe
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 ).
Anforderungen
Header: <algorithm>
Namespace: std