remove_copy_if
Kopie prvky ze zdrojové oblasti na místo určení rozsahu, s výjimkou splňující predikát nejsou zkopírovány bez narušení pořadí zbývající prvky a vrácení konec nové cílové oblasti.
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator remove_copy_if(
InputIterator _First,
InputIterator _Last,
OutputIterator _Result,
Predicate _Pred
);
Parametry
_First
Vstupní iterátor adresování umístění první prvek v oblasti, ze které jsou odebírány prvky._Last
Vstupní iterátor adresování jednu pozici za poslední prvek v oblasti, ze které jsou odebírány prvky._Result
Výstupní iterace adresování umístění první prvek v cílové oblasti, do které budou odebrány elementy._Pred
Unárního predikátu, která musí být splněna je hodnota prvku, které mají být nahrazeny.
Vrácená hodnota
Vpřed iterace adresování nový konec pozice cílové oblasti, jeden za poslední prvek sekvence zbývajících volných prvků, které splňují predikátu.
Poznámky
Odkazované zdrojové oblasti musí být platná. všechny ukazatele musí být dereferenceable a v pořadí je dostupná z první na poslední pozici ve incrementation.
Cílová oblast obsahuje zbývajících prvků, které budou zkopírovány po odebrání prvků zadané hodnoty musí být dostatek místa.
Pořadí prvků neodebrané zůstává stabilní.
operator== Slouží k určení rovnosti mezi prvky musí stanovit vztah rovnocennosti mezi jeho operandy.
Složitost je lineární: existují (_Last - _First) porovnání rovnosti a maximálně (_Last – _First) přiřazení.
remove_copy_if má dva související formuláře:
Informace o chování těchto funkcí naleznete v tématu Checked – iterátory.
Příklad
// 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;
}
Výstup ukázky
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 ).
Požadavky
Záhlaví: <algoritmus>
Obor názvů: std