remove_copy_if
Kopie elementów z zakresu źródła do miejsca docelowego, w zakresie, chyba że spełniające predykatu nie są kopiowane, bez naruszania zamówienia pozostałe elementy i zwracanie koniec nowego zakresu docelowego.
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator remove_copy_if(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
Predicate _Pred
);
Parametry
_First
Wejściowy sterująca adresowania położenie pierwszego elementu w zakresie, z którego elementy są usuwane._Last
Wejściowy sterująca adresowania pozycji, jeden obok ostatniego elementu w zakresie, z którego elementy są usuwane._Result
Dane wyjściowe iterację adresowania położenie pierwszego elementu w zakresie docelowym, do którego elementy są usuwane._Pred
Wartość elementu jest wymieniana jest predykatu jednoelementowego, które muszą być spełnione.
Wartość zwracana
Do przodu sterująca, adresowania nowe położenie końca zakresu docelowego, jeden przeszłości końcowy element sekwencji pozostałość wolne od elementy spełniające predykatu.
Uwagi
Odwołanie do zakres źródłowy musi być prawidłowy; wszystkie wskaźniki muszą być dereferenceable i w sekwencji ostatniej pozycji jest dostępny z pierwszym przez incrementation.
Zakres docelowy zawierają elementy pozostałość, które zostaną skopiowane, po usunięciu elementy o określonej wartości musi być wystarczająca ilość miejsca.
Kolejność elementów nie usunięte pozostaje stabilny.
operator== Używana do określenia równości między elementami musi nakładać relacja równoważności między argumentów.
Złożoność jest liniowa: istnieją (_Last - _First) porównań równości i co najwyżej (_Last - _First) przydziałów.
remove_copy_if ma dwa powiązane formularze:
Aby uzyskać informacje o zachowaniu tych funkcji, zobacz Zaznaczone iteratory.
Przykład
// 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;
}
Przykładowe dane wyjściowe
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 ).
Wymagania
Nagłówek: <algorytm>
Przestrzeń nazw: std