27項 コンテナのconst_iteratorをiteratorに変換するには、distanceとadvanceを使う

コンテナのconst_iteratoriteratorに変換するには、distanceとadvanceを使う



const_iteratorは暗黙的にiteratorに変換されないので、明示的に変換する必要があります。
変換の代わりに、iteratorconst_iteratorと同じ所を指すようにするには、distanceとadvanceを使います。

typedef vector<T>::iterator Iter;
typedef vector<T>::const_iterator ConstIter;

Iter i(c.begin());                         // iはコンテナの先頭を指しておく

advance(i, distance<ConstIter>(i, ci));    // iとci(const_iteratorとして)の
                                           // 間の距離を計算したあと、
                                           // その距離だけiを移動する

distance呼び出し時にを明示的に指定しているのは、distanceの2つの引数の型が同じである必要があるからです。const_iteratorを指定すると、iteratorconst_iteratorに暗黙的に変換されるため、呼び出しが成功します。