これは少し異なる見方です。特定のコレクションへConst_iterator
のポインターとしてそれを渡し、コレクションも渡す場合、ほとんど意味がありません。Meyer氏は、コレクションインスタンスのほとんどのメンバー関数では使用できないことを具体的に述べていました。その場合は、昔ながらのが必要になります。ただし、コレクションへのハンドルがない場合、2つの違いは、が指すものを変更できることと、が参照するオブジェクトを変更できないことだけです。const_iterator
iterator
iterator
const_iterator
iterator
つまり...コレクションと位置をコレクションに渡してアルゴリズムに渡すときはいつでも使用したいとします。基本的に、次のような署名:
void some_operation(std::vector<int>& vec, std::vector::const_iterator pos);
あまり意味がありません。暗黙のステートメントはsome_operation
、基になるコレクションを自由に変更できますが、どのpos
参照を変更することは許可されていないということです。それはあまり意味がありません。これが本当に必要な場合pos
は、イテレータではなくオフセットにする必要があります。
反対に、STLのアルゴリズムのほとんどは、イテレーターのペアによって指定された範囲に基づいています。iterator
コレクション自体が渡されることはないため、との違いはconst_iterator
、コレクション内の値をイテレータを介して変更できるかどうかです。コレクションへの参照がなければ、分離はかなり明確です。
うまくいけば、それは物事を泥のように明確にしました;)