title: C++ std::vector<>::iterator is not a pointer, why?
body: <p>Just a little introduction, with simple words.
  In C++, iterators are "things" on which you can write at least the dereference operator <code>*it</code>, the increment operator <code>++it</code>, and for more advanced bidirectional iterators, the decrement <code>--it</code>, and last but not least, for random access iterators we need operator index <code>it[]</code> and possibly addition and subtraction.</p>
  
  <p>Such "things" in C++ are objects of types with the according operator overloads, or plain and simple pointers.</p>
  
  <p><code>std::vector&lt;&gt;</code> is a container class that wraps a continuous array, so pointer as iterator makes sense. On the nets, and in some literature you can find <code>vector.begin()</code> used as a pointer.</p>
  
  <p>The rationale for using a pointer is less overhead, higher performance, especially if an optimizing compiler detects iteration and does its thing (vector instructions and stuff). Using iterators might be harder for the compiler to optimize.</p>
  
  <p>Knowing this, my question is why modern STL implementations, let's say MSVC++ 2013 or libstdc++ in Mingw 4.7, use a special class for vector iterators?</p>