remove_if
Eliminuje prvky, které splňují predikát z dané oblasti bez narušení pořadí zbývajících prvků a vrácení konec nové oblasti prosté zadanou hodnotu.
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator _First,
ForwardIterator _Last,
Predicate _Pred
);
Parametry
_First
Vpřed iterační na pozici první prvek v oblasti, z nichž prvky odstraněny._Last
Vpřed iterační přejdete jednu pozici za poslední prvek v oblasti, z nichž prvky odstraněny._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ý konec pozice změněné oblasti jeden za poslední prvek zdarma zadaná hodnota zbývajících sekvence.
Poznámky
Rozsah odkazuje, musí být platná. všechny ukazatele musí být dereferenceable a v pořadí je dostupná z první poslední pozice 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í pro rovnost.
Seznam obsahuje účinnější verze členské funkce odebrat, které relinks ukazatelů.
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;
}
Vzorový výstup
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í: <algorithm>
Obor názvů: std