In 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<std::bidirectional_iterator_tag,T>
{
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*& reference;//SHOULD IT BE T& AS reference or T*&?
};
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.
Thank you.
The definition in the standard (section 24.3.2) is:
As you can see, the defaults are:
This is assuming that the iteration is over a container of elements of type
T. If your container holds elements of typeT*instead, the typedefs in your question would be correct.