remove_copy_if
Veröffentlicht: Juni 2016
Kopiert Elemente aus einem Quellbereich in einen Zielbereich, ohne dass Elemente, die ein Prädikat erfüllen, kopiert werden und ohne die Reihenfolge der restlichen Elemente zu beeinträchtigen und das Ende eines neuen Zielbereichs zurückzugeben.
Syntax
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 in dem Bereich adressiert, aus dem Elemente entfernt werden._Last
Ein Eingabeiterator, der die Position hinter dem letzten Element in dem Bereich adressiert, aus dem Elemente entfernt werden._Result
Ein Ausgabeiterator, der die Position des ersten Elements in dem Zielbereich adressiert, in den Elemente entfernt werden._Pred
Das unäre Prädikat, das erfüllt werden muss, ist der Wert eines zu ersetzenden Elements.
Rückgabewert
Ein Forward-Iterator, der die neue Endposition des Zielbereichs adressiert, sprich eine Position hinter dem letzten Element der verbleibenden Sequenz, die die Elemente nicht enthält, die das Prädikat erfüllen.
Hinweise
Der Quellbereich, auf den verwiesen wird, muss gültig sein. Alle Zeiger müssen dereferenzierbar sein und die letzte Position innerhalb der Sequenz ist von der ersten Position aus durch Zunahme erreichbar.
Der Zielbereich muss über ausreichend Platz verfügen, um die verbleibenden Elemente zu enthalten, die nach dem Entfernen von Elementen des angegebenen Werts kopiert werden.
Die Reihenfolge der nicht entfernten Elemente bleibt bestehen.
Der zur Bestimmung des Gleichheitszustands zwischen Elementen verwendete operator== muss eine Äquivalenzrelation zwischen zwei Operanden vorgeben.
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:
checked_remove_copy_if
unchecked_remove_copy_if
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