remove_if
Kalan öğelerin sırasını rahatsız ediyor ve belirtilen değeri boş yeni bir aralığın sonuna döndürerek belli bir aralıktan yüklemi karşılamak öğeleri ortadan kaldırır.
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator _First,
ForwardIterator _Last,
Predicate _Pred
);
_First
Öğeleri alınıp kaldırılmakta olan aralıktaki ilk öğenin konumunu gösteren bir ileriye doğru Yineleyici._Last
Geçmiş öğeleri alınıp kaldırılmakta olan aralıktaki son öğenin konumunu bir işaret ileriye doğru bir yineleyici._Pred
Yerine getirilmesi gereken tekli yüklemi öğe değerinin değiştirilmesi olacaktır.
Yeni Bitiş pozisyonu değiştirilen aralığın son öğesi işlemi sırasının belirtilen değeri boş geçen bir adresleme ileriye doğru bir yineleyici.
Başvurulan aralığı geçerli olması gerekir; Tüm işaretçiler dereferenceable ve sıra içinde son konuma birinciden erişilebildiğinden tarafından incrementation.
Kaldırılmamışsa öğelerin sırasını kararlı kalır.
operator== Öğeleri arasındaki eşitlik İşlenenlerini arasında bir eşdeğerlik ilişkisi tanıtamazlar gerekir belirlemek için kullanılır.
Doğrusal karmaşıklık: vardır (_Last – _First) eşitlik karşılaştırmaları.
Liste, işaretçiler i Kaldır daha verimli bir üye işlev sürümü vardır.
// 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;
}
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 ).
Başlık: <algorithm>
Namespace: std