イテレータとポインタの違い


C++言語においてイテレータとポインタの違いは何ですか




  * 「ポインタ(pointer)」とは、 **型(type)の一種** であり、 **C++言語仕様** の一部として定義されます。
  * 「イテレータ(iterator)」とは、 **一定の要件(requirement)を満たす任意の型** のことを指し、その要件とは **C++標準ライブラリの仕様** にて規定されます。
  * 「ポインタ」は「イテレータ」の一種と考えることができます。配列型というコンテナにおけるイテレータが、ポインタ型です。

* * *

C++標準ライブラリ（の基になったSTL）では、「コンテナ」「イテレータ」「アルゴリズム」という3つの構成要素から成り立ちます。

イテレータが存在しなかった場合、`copy()`や`sort()`や`find()`といった様々なアルゴリズムを、コンテナ種別(`vector`,
`deque`, `list`...)毎に用意しなければなりません。つまりN種類のアルゴリズム×M種類のコンテナでは、(N × M)
個の実装関数が必要になってしまいます。

実際には、アルゴリズム中で直接操作する対象はコンテナそのものではなく、コンテナの“要素を指すポインタ的なもの”に対する処理となります。この“
**コンテナ要素を指すポインタ的なもの**
”が「イテレータ」です。またイテレータの特性は、そのコンテナによって提供可能な機能が決まります。アルゴリズムをコンテナ毎ではなくイテレータ毎に用意することで、N種類のアルゴリズム＋m種類のイテレータの実装、つまり
(N ＋ m) 個の実装関数におさえることができます。

