A class Circulator that satisfies the requirements of a forward circulator with the value type T, supports the following operations. See the reference pages for the full set of requirements. Note that the stated return values are not required, only a return value that is convertible to the stated type is required. As for C++, we recommend the use of 0 instead of NULL.
 
the value type T.
 
 
either reference or const reference to T.
 
 
either pointer or const pointer to T.
 
 
unsigned integral type that can hold the size
of the sequence.
 
 
signed integral type that can hold the
distance between two circulators.
 
 
circulator category
Forward_circulator_tag.

 
a circulator equal to NULL denoting
an empty sequence.
 
 
a circulator equal to $$d.


 Assignment. 

 Test for emptiness. 

 Test for nonemptiness, i.e. !(c == NULL). 

 $$c is equal to $$d if they refer to the same item. 

 Test for inequality, i.e. !(c == d). 


Returns the value of the circulator.
If Circulator is mutable *c = t is valid. Precondition: c is dereferenceable. 


Returns a pointer to the value of the circulator. Precondition: c is dereferenceable. 


Prefix increment operation. Precondition: c is dereferenceable. Postcondition: c is dereferenceable. 

 Postfix increment operation. The result is the same as that of: Circulator tmp = c; ++c; return tmp; . 
A class Circulator that satisfies the requirements of a bidirectional circulator with the value type T, supports the following operations in addition to the operations supported by a forward circulator.
 
circulator category
Bidirectional_circulator_tag.



Prefix decrement operation. Precondition: c is dereferenceable. Postcondition: c is dereferenceable. 

 Postfix decrement operation. The result is the same as that of Circulator tmp = c; c; return tmp; . 
A class Circulator that satisfies the requirements of a random access Circulator for the value type T, supports the following operations in addition to the operations supported by a bidirectional Circulator. In contrast to random access iterators, no comparison operators are available for random access circulators.
 
circulator category
Random_access_circulator_tag.


 
The result is the same as if the prefix increment operation was applied $$n times, but it is computed in constant time.  

 
Same as above, but returns a new circulator.  

 
Same as above.  

 
The result is the same as if the prefix decrement operation was applied $$n times, but it is computed in constant time.  

 
Same as above, but returns a new circulator.  

 
Returns *(c + n).  

 returns the difference between the two circulators. The value will be in the interval $$[ 1s , s1 ] if $$s is the size of the total sequence. The difference for a fixed circulator c (or $$d) with all other circulators $$d (or c) is a consistent ordering of the elements in the data structure. There has to be a minimal circulator $$d_{}min$$ for which the difference c$$ d_{}min$$ to all other circulators c is nonnegative. 

 
Returns the minimal circulator $$c_{}min$$ in constant time. 