title: Iterator category
body: <p>In code:  </p>
  
  <pre><code>//I know that to get this effect (being able to use it with std algorithms) I can inherit like I did in line below:
  
      class Iterator //: public std::iterator&lt;std::bidirectional_iterator_tag,T&gt;
  
      {
      private:
          T** itData_;
      public:
          //BUT I WOULD LIKE TO BE ABLE TO DO IT BY HAND AS WELL
          typedef std::bidirectional_iterator_tag iterator_category;
          typedef T* value_type;//SHOULD IT BE T AS value_type or T*?
          typedef std::ptrdiff_t difference_type;
          typedef T** pointer;//SHOULD IT BE T* AS pointer or T**?
          typedef T*&amp; reference;//SHOULD IT BE T&amp; AS reference or T*&amp;?
  };
  </code></pre>
  
  <p>Basically what I'm asking is if I have my variable of type T** in iterator class is it right assumption that value type for this iterator will be T* and so on as I described in comments in code, right next to relevant lines.<br>
  Thank you.</p>