私は以前にこの質問をしました。std :: setに興味がありますが、別の紛らわしいシナリオがあります。
つまり、次のコードは、T = std::vectorおよびT=std::setの合法でポータブルなc++です。
template <typename T>
void remove_elements(T& collection, int removal_value)
{
typename T::iterator new_end =
std::remove(collection.begin(), collection.end(), removal_value);
collection.erase(new_end, collection.end());
}
SGIリファレンスによると、set::iteratorとset::const_iteratorは同じであるため、これが正当であるかどうかはわかりません。しかし、タイプに関係なく、必要な操作を実行する別の方法を見つけることができないようです。テンプレートの特殊化に頼ることもできますが、そもそも特殊化する必要がないのはいいことです。