title: Why are Iterators notated as value objects, but referenced as pointers?
body: <p>In the C++ Standard Map Library, a call to the iteration functions returns an iterator pointer,</p>
  
  <pre><code>std::map&lt;int, int&gt; map;
  std::map&lt;int, int&gt;::iterator ite = map.find(1);
  </code></pre>
  
  <p>But, when the iterator is used, it must be accessed as a pointer variable,</p>
  
  <pre><code>int first = ite-&gt;first;
  int second = ite-&gt;second;
  </code></pre>
  
  <p>Why is this the case when we are putting the obtained value from the <code>find</code> function into a non-pointer. Shouldn't the correct syntax be:</p>
  
  <pre><code>std::map&lt;int, int&gt;::iterator *pIte = map.find(1)
  </code></pre>
  
  <p>or if using the original syntax,</p>
  
  <pre><code>int first = ite.first;
  int second = ite.second;
  </code></pre>
  
  <p>since we are obtaining a value, and not a pointer from the function's return value? It is also not clarified in the <a href="http://www.cplusplus.com/reference/map/map/begin/" rel="nofollow">documentation</a>. Why is this the case?</p>