remove_if
Исключает элементы, которые удовлетворяют предикату из заданного диапазона без нарушения порядок остальных элементов и возвращая конец нового диапазона свободно указанного значения.
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator _First,
ForwardIterator _Last,
Predicate _Pred
);
Параметры
_First
Передний итератор, указывающего на позиции первого элемента в диапазоне от элементов удаления._Last
Передний итератор, указывающего на позиции одному окончательным за элементом в диапазоне от элементов удаления._Pred
Унарный предикат, должен быть удовлетворен значение элемента могли быть.
Возвращаемое значение
Передний итератор слишком новая конечная позиция диапазона, измененного за одно окончательное элементом последовательности обмылка свободно указанного значения.
Заметки
Указанный диапазон должен быть допустимым; все указатели должны быть dereferenceable и внутри последовательности последнего положения доступен из первого инкрементацией.
Порядок не удаленных элементов оно остается.
operator== используется, чтобы определить равенство между элементами должен создать связь между ее эквивалентности операндами.
Сложность линейная: (_Last — _First) сравнения на равенство.
Список имеет более эффективную версию функции-члена удаления, relinks указатели.
Пример
// 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 ).
Требования
Заголовок: <algorithm>
Пространство имен: std