c++11 - Creating custom random access iterator in C++ 2011 -


i opinion on code. need random access iterator custom container. if read c++ 2011 standard, specially chapter 24, understood implementation following:

class my_iterator : public std::iterator<std::random_access_iterator_tag, my_element> {     private:        my_container *_ref;        my_iterator_state state; // useful state     public:        my_iterator ();        my_iterator (const my_iterator &);        my_iterator (my_iterator &&);        ~my_iterator ();        my_iterator &operator = (const my_iterator &);        my_iterator &operator = (my_iterator &&);        reference operator * ();        my_iterator &operator ++ ();        bool operator != (my_iterator);        value_type operator * ();        pointer operator -> ();        my_iterator &operator * ();        void operator ++ (int);        value_type operator ++ (int);        const my_iterator &operator ++ (int);        reference operator ++ (int);        my_iterator &operator -- ();        const my_iterator operator -- (int);        reference operator -- (int);        my_iterator &operator += (difference_type);        my_iterator operator + (difference_type);        my_iterator operator - (difference_type);        reference operator [] (difference_type);        bool operator < (my_iterator);        bool operator > (my_iterator);        bool operator <= (my_iterator);        bool operator >= (my_iterator);        friend difference_type (my_iterator, my_iterator);        friend my_iterator operator + (difference_type, my_iterator);        friend void swap (iterator &, iterator &); };  void swap (iterator &, iterator &); difference_type (my_iterator, my_iterator); my_iterator operator + (difference_type, my_iterator); 

the above implementation correct , full-featured? there members?

in general, can't have overloads same arguments different return types, several of members can't exist. should keep following:

reference operator * (); my_iterator operator ++ (int); my_iterator operator -- (int); 

and remove bogus overloads:

value_type operator * (); void operator ++ (int); value_type operator ++ (int); const my_iterator &operator ++ (int); reference operator ++ (int); const my_iterator operator -- (int); reference operator -- (int); 

this makes no sense:

friend difference_type (my_iterator, my_iterator); 

which assume should be:

friend difference_type operator-(my_iterator, my_iterator); 

and seem missing operator-=


Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -