remove_if
Eliminuje prvky, které splňují predikátu z dané oblasti bez narušení pořadí zbývajících prvků a vrácení konec novou oblast volného zadané hodnoty.
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator _First,
ForwardIterator _Last,
Predicate _Pred
);
Parametry
_First
Přední iterační přejdete na první prvek pozice v oblasti, ze které jsou odebírány prvky._Last
Přední iterační přejdete na jednu pozici za poslední prvek v oblasti, ze které jsou odebírány prvky._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é pozice koncové oblasti upravené jeden za poslední prvek sekvence zbývajících volných zadané hodnoty.
Poznámky
Uváděný rozsah musí být platná. všechny ukazatele musí být dereferenceable a v pořadí je dostupná z první na poslední pozici ve incrementation.
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.
Seznam obsahuje účinnější verze členské funkce odebrat, které relinks ukazatele.
Příklad
// alg_remove_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;
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 << "Vector v1 is ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Remove elements satisfying predicate greater6
new_end = remove_if (v1.begin( ), v1.end( ), greater6 );
cout << "Vector v1 with elements satisfying greater6 removed is\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// To change the sequence size, use erase
v1.erase (new_end, v1.end( ) );
cout << "Vector v1 resized elements satisfying greater6 removed is\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
}
Výstup ukázky
Vector v1 is ( 7 1 9 2 0 7 7 3 4 6 8 5 7 7 ).
Vector v1 with elements satisfying greater6 removed is
( 1 2 0 3 4 6 5 3 4 6 8 5 7 7 ).
Vector v1 resized elements satisfying greater6 removed is
( 1 2 0 3 4 6 5 ).
Požadavky
Záhlaví: <algoritmus>
Obor názvů: std