## 2.5 反復子の演算

標準 C++ ライブラリは、反復子の操作に使用できる 2 つの関数を提供します。関数 `advance()` は反復子と数値を引数とし、指定された分だけ移動することによって反復子を変更します。

    void advance (InputIterator & iter, Distance & n);

ランダムアクセス反復子の場合、これは `iter + n;` と同じですが、この関数はすべての形式の反復子と共に演算を行えるように設計されているため、非常に有益です。順方向反復子の場合、数値間の距離は正である必要がありますが、双方向反復子やランダムアクセス反復子の場合は、値を正と負のどちらにすることもできます。演算はランダムアクセス反復子でのみ (一定時間) 有効です。これ以外の場合は、反復子の演算子 `++` または `--` を呼び出すループとして実装されるため、移動した距離に対する時間の比率が計測されます。`advance()` 関数は配下の反復子に対して演算が有効であるかどうかを確認しません。

2 番目の関数 `distance()` は、シーケンス内の 1 つの要素を他へ移動するために必要な反復子演算の数を返します。この関数の記述は、次のとおりです。

    Distance distance (InputIterator first, InputIterator last);

結果は、参照によって渡される 3 番目の引数に返されます。`first` から `last` へ移動するために演算子 `++` を実行する必要がある回数によって、この値を距離を増分します。関数を呼び出す前に、この引数で渡される変数が正しく初期化されているかどうかを必ず確認してください。

> 注: 上記の距離の定義は、使用中のコンパイラが部分的な特殊化をサポートしていることが前提です。そうでない場合は、代わりに次の定義を使用する必要があります。
> void distance (InputIterator first, InputIterator last, Distance &n);

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月