algorithmのstd::remove()について質問です。

std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
std::remove(v.begin(), v.end(), 0);
std::remove(v.begin(), v.end(), 1);
printf("%d", v.size());

上記のようにすると、最後のvのサイズは1を期待するのですが3のままです。
でも、v[0]には本来の0ではなく2が入っています。
v[1]もv[2]も2が入っています。

std::remove()の代わりにvector::erase()を使用すれば、
v.size()は1を返します。

std::remove()はそういうモノなのでしょうか?

VC2008で確認しています。