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
Post a Comment