remove_copy
Veröffentlicht: Juni 2016
Kopiert Elemente aus einem Quellbereich in einen Zielbereich, ohne dass Elemente eines angegebenen Werts 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 Type>
OutputIterator remove_copy(
InputIterator
_First
,
InputIterator
_Last
,
OutputIterator
_Result
,
const Type&
_Val
);
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._Val
Der Wert, der aus dem Bereich entfernt werden soll.
Rückgabewert
Ein Forward-Iterator, der die neue Endposition des Zielbereichs adressiert, sprich eine Position hinter dem letzten Element der Kopie der verbleibenden Sequenz, die den angegebenen Wert nicht enthält.
Hinweise
Die Quell- und Zielbereiche, auf die verwiesen wird, müssen 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 verfügt über zwei verknüpfte Formulare:
checked_remove_copy
unchecked_remove_copy
Informationen über das Verhalten dieser Funktionen finden Sie unter Überprüfte Iteratoren.
Beispiel
// alg_remove_copy.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>
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 of 7
new_end = remove_copy ( v1.begin( ), v1.end( ), v2.begin( ), 7 );
cout << "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 the value 7 removed:\n ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.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 ).
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 the value 7 removed:
( 1 9 2 0 3 4 6 8 5 0 ).
Anforderungen
Header: <algorithm>
Namespace: std