//  rm_if.cpp:   Алгоритм remove_if.

#include <iostream> #include <vector> #include <algorithm> #include <iterator>

using namespace std;

void out(const  char  *s,   const  vector<int> &v) {    cout  <<  s;

copy(v.begin(),   v.end(),

ostream_iterator<int>(cout,   "   "));

cout  << endl; }

bool condfint x) { return x <= 2; }

int main()

{ vector<int> v;

vector<int>::iterator new_end;

v.push_back(l); v.push_back(4); v.push_back(l);

v.push_back(3); v.push_back(1); v.push_back(2);

out("Initial sequence v:\n", v);

new_end = remove_if(v.beginf), v.endf), cond);

v.erase(new_end, v.endf));

out("After erasing all elements <= 2:\n", v) ;

return 0; }

Эта программа выдает:

Initial  sequence v:

14  13   12

After erasing all elements <= 2:

4 3

Как и remove, алгоритм remove_if является стабильным, поэтому совпадение порядка следования элементов 4 и 3 в результирующей последовательности с их порядком в исходной последовательности не является случайным.


<< назад вперед >>