Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

remove_if (ukázky STL)

Standardní knihovna šablon