remove_ifは、コンテナの要素の中の条件に一致した要素を削除します。
remove_if()は次の書式で使います。
template iter remove_if(iter first, iter last, pred pr);
void list::remove_if(binder2nd > pr);
firstは削除するかどうか調べる要素の先頭、endは削除するかどうか調べる要素の最後、prは削除する条件です。
最初の書式のアルゴリズムは、条件prに一致する要素を削除します。コンテナから要素を実際に削除したい場合はerase()を使います。
二番目の書式の関数は、条件prに一致する要素をすべてリストから削除します。
次の例は、vectorから値が奇数である要素を削除する例です。
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v;
vector <int>::iterator iter;
for (int i = 1; i < 11; i++)
v.push_back(i);
for (iter = v.begin(); iter != v.end(); iter++)
cout << *iter << ",";
cout << endl;
vector<int>::iterator result = std::remove_if(v.begin(), v.end(), [](int x) { return x % 2 != 0; });
// remove(v.begin(), v.end(), 5);
for (iter = v.begin(); iter != result; iter++)
cout << *iter << ",";
cout << endl;
return 0;
}
実行結果は次のようになります。
1,2,3,4,5,6,7,8,9,10,
2,4,6,8,10,