Freigeben über


remove_if

Eliminiert Elemente, die ein Prädikat aus einem angegebenen Bereich erfüllen, ohne die Reihenfolge der restlichen Elemente zu beeinträchtigen und Ende eines neuen Bereichs zurückzugeben, der aus dem angegebenen Wert frei ist.

template<class ForwardIterator, class Predicate> 
   ForwardIterator remove_if( 
      ForwardIterator _First,  
      ForwardIterator _Last, 
      Predicate _Pred 
   );

Parameter

  • _First
    Ein Vorwärtsiterator, der auf der Position des ersten Elements im Bereich zeigt, in dem Elemente entfernt werden.

  • _Last
    Ein Vorwärtsiterator, der auf der Position eine hinter dem letzten Element im Bereich zeigt, in dem Elemente entfernt werden.

  • _Pred
    Das Prädikat, unäre das erfüllt sein muss, ist der Wert eines Elements wird ersetzt werden.

Rückgabewert

Ein Vorwärtsiterator, der der neuen, geänderten Endposition des Bereichs eine hinter dem letzten Element der Restsequenz frei vom angegebenen Wert.

Hinweise

Der Bereich, auf den verwiesen wird, gültig sein; muss alle Zeiger müssen dereferenzierbar befinden der Sequenz ist die letzte Position der ersten von Zunahme erreichbar.

Die Reihenfolge der Elemente, die nicht entfernt werden, bleibt stabil.

operator==, das verwendet wird, um die Gleichheit zwischen Elementen zu bestimmen, muss eine Äquivalenzrelation zwischen den Operanden verlangen.

Die Komplexität ist linear: es gibt (_Last - _First) Vergleiche auf Gleichheit.

Liste können eine effizientere Memberfunktionsversion von entfernen, die Zeiger neu verknüpft.

Beispiel

// 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;
}

Beispielausgabe

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 ).

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

remove_if (STL-Beispiele)

Standardvorlagenbibliothek