std::remove()

哎呀!

std::vector の要素削除は不便だなー、と思っていたけど、こんな便利な機能があったなんて。

今までのコード
#include <vector>

std::vector<Foo *>::iterator iter = v.begin();
Foo *foo;
for (int i = 0; i < n; i++) {
    iter++;
}
foo = *iter;
v.erase(iter);
delete foo;
便利なコード
#include <vector>
#include <algorithm> // ←これ

Foo *foo = v[n];
v.erase(std::remove(v.begin(), b.end(), foo));
delete foo;


僕の場合、大抵削除したい要素のインデックスがあらかじめわかっているケースが多いので、無駄にイテレータをまわしていたけど、algorithm で提供されている std::remove() が便利。

要素の値を探し出して、指定した範囲からすべて削除する、というもので、わかって使わないと思わずたくさん削除されてしまうかもしれないという副作用があるんだけど、これは便利だ。

std::vector.erase() はイテレータをひとつだけ受け取るメソッドなんだけど、なんでこれで複数削除できるんだろうな。不思議だ。