C++の悩ましいイテレータ

STLのstd::vector::iterator というのはtypedefであって、クラスではない。
なので、

  std::vector<int> vec;
  std::vector<int>::iterator it;
  it = vec.begin();
  it = it + 10; //← vec.end()を越える
  for(int i = 0; it != vec.end(); it++){
    cout << "What's?" <<endl; //←止まらない
    i++;
  }

こういうことをすると無限ループ?(ポインタをインクリメントし続ける)になる。理由は「止まるべき部分をスキップしているから」。なぜSTLイテレータは、クラスにして、「+」演算子を定義しなかったのだろう。

それならば、Vectorの要素数を超える加算が行われたとき、末尾要素にするというのができただろうに。数学的にも、イテレータを要素とするような空間は、そのVector等の全順序で有限空間に等しいのだから、その空間を越えることができることがおかしいと思うんだよなぁ。

だから、イテレータの加算は「++」しか本来許されないのだね。