質問: C++言語においてイテレータとポインタの違いは何ですか
回答: * 「ポインタ(pointer)」とは、**型(type)の一種**であり、**C++言語仕様**の一部として定義されます。 * 「イテレータ(iterator)」とは、**一定の要件(requirement)を満たす任意の型**のことを指し、その要件とは**C++標準ライブラリの仕様**にて規定されます。 * 「ポインタ」は「イテレータ」の一種と考えることができます。配列型というコンテナにおけるイテレータが、ポインタ型です。 C++標準ライブラリ(の基になったSTL)では、「コンテナ」「イテレータ」「アルゴリズム」という3つの構成要素から成り立ちます。 イテレータが存在しなかった場合、`copy()`や`sort()`や`find()`といった様々なアルゴリズムを、コンテナ種別(`vector`, `deque`, `list`...)毎に用意しなければなりません。つまりN種類のアルゴリズム×M種類のコンテナでは、(N × M) 個の実装関数が必要になってしまいます。 実際には、アルゴリズム中で直接操作する対象はコンテナそのものではなく、コンテナの“要素を指すポインタ的なもの”に対する処理となります。この“**コンテナ要素を指すポインタ的なもの**”が「イテレータ」です。またイテレータの特性は、そのコンテナによって提供可能な機能が決まります。アルゴリズムをコンテナ毎ではなくイテレータ毎に用意することで、N種類のアルゴリズム+m種類のイテレータの実装、つまり (N + m) 個の実装関数におさえることができます。