remove_copy_if
Kopie prvky ze zdrojové oblasti s cílem 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í iterační adresování první prvek pozice v oblasti, z nichž prvky odstraněny._Last
Vstupní iterační adresování jednu pozici za poslední prvek v oblasti, z nichž prvky odstraněny._Result
Iterace výstup adresování pozici první prvek v cílové oblasti, které jsou odebrány prvky._Pred
Unární predikát, který musí být je že hodnota prvku je nahradit.
Vrácená hodnota
Vpřed iterační adresování nové pozice konce cílového rozsahu jeden za poslední prvek volného prvky splňující predikátu remnant sekvence.
Poznámky
Odkaz na zdrojovou oblast musí být platné; všechny ukazatele musí být dereferenceable a v pořadí je dostupná z první poslední pozice ve incrementation.
Cílová oblast obsahovaly remnant prvky, které budou zkopírovány po odebrání prvků zadaná hodnota 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) pro rovnost a na většinu porovnávání (_Last – _First) přiřazení.
remove_copy_ifmá dva související formuláře:
Informace o chování těchto funkcí naleznete v tématu Zaškrtnuté 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;
}
Vzorový výstup
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í: <algorithm>
Obor názvů: std