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