remove_ifはbool func(const T& val)を定義する。 (c.f. sortはbool func(const T& l, const T& r)を定義)
・remove系はeraseの中で!
・forの中でeraseするなら、it++は付けずに、自分でイテレータを管理する。具体的には、if (do_erase()) it = erase(…); else it++;によってイテレータを更新。
#include <hamkoutil.hpp>
bool comp (const int& val) {return val % 2;}
main()
{
vi a = {1, 2, 3, 4};
a.erase(a.begin() + 2, a.end());
print_vector(a);
// -> 1 2
vi b = {1, 2, 3, 4};
b.erase(remove_if(b.begin(), b.end(), comp), b.end()); // removeはeraseの中で使うと良い
print_vector(b);
// -> 2 4
vi c = {1, 2, 3, 4};
for (auto it = c.begin(); it != c.end();)
if (*it % 2)
it = c.erase(it, it + 1);
else
it++;
// -> 2 4
}