シーケンスコンテナ(vector, string, deque)とlistと連想コンテナ(set, map, 以下略)、の3つに分けて整理します。
"c"は、その時のコンテナのインスタンスを表します。std::を省略しています。完全なコードではありません。
特定の値を削除したい時
・シーケンスコンテナ
c.erase(remove(c.begin(), c.end(), 100), c.end());//100は削除したい要素
・リスト
c.remove(100);//100は削除したい要素
・連想コンテナ
c.erase(100);//100は削除したい要素
特定の述語を満たす要素を削除したい時
"cond"は述語関数を表します。
・シーケンスコンテナ
c.erase(remove_if(c.begin(), c.end(), cond), c.end());
・リスト
c.remove_if(cond);
・連想コンテナ
2通りあり、remove_copy_ifとswapを使う方法(コーディング簡単)と、後置インクリメント(効率が良い)を使う方法です。
前者。"t"は"c"と同型の空のコンテナです。
remove_copy_if(c.begin(), c.end(), inserter(t, t.end()), cond); c.swap(t);
後者
for (auto i = c.begin(); i != c.end(); ) { if (cond(*i)) { c.erase(i++); } else { ++i; } }
特定の値を削除し、何らかの処理を挟みたい時
挟みたい処理をfunc()とします。
・シーケンスコンテナ
for (auto i = c.begin(); i != c.end(); ) { if(cond(*i)) { func(); i = c.erase(i); } else { ++i; } }
・連想コンテナ
for (auto i = c.begin(); i != c.end(); ) { if (cond(*i)) { func(); c.erase(i++); } else { ++i; } }
リストはシーケンスコンテナと同様に書きます。
参考
Effective STL