ISO 14882 2003(別名C ++の聖なる標準)によると、パラメータとして(ではなく)std::set<K, C, A>::erase
を使用しているようです。iterator
const_iterator
23.3.3から[2]
void erase(iterator position);
また、VS2008に付属しているSTLの実装では、const_iterator
別のコンパイラでコードをコンパイルしようとすると、消去に時間がかかり、不快な驚きが生じたことも注目に値します。さて、私のバージョンはをとるので、(それが自明ではなかったかのように)const_iterator
消去を実装することが可能です。const_iterator
標準化委員会は、を取得するために消去を必要とするいくつかの実装(または手元にある既存の実装)を念頭に置いていたと思いますiterator
。
- これが事実であることに同意する場合、削除される予定の要素を変更する必要がある実装について説明してください
set::erase
(私はできません)。 - 同意できない場合は、なぜ彼らがこの決定を思い付くのか教えてください。つまり、要素を消去することは、ポインタを再配置することです。
編集
イテレータの場合でも、セット内の要素を変更できないことに気づきました。しかし、疑問はまだ残っています-特に、ある意味で同等である場合は、const_iteratorを使用しないのはなぜですか?