template<class BidIt,
class T = iterator_traits<BidIt>::value_type,
class Ref = T&,
class Ptr = T *, class Dist = ptrdiff_t>
class reverse_bidirectional_iterator
: public iterator<bidirectional_iterator_tag, T, Dist> {
public:
typedef BidIt iter_type;
typedef Ref reference_type;
typedef Ptr pointer_type;
reverse_bidirectional_iterator();
explicit reverse_bidirectional_iterator(BidIt x);
BidIt base() const;
Ref operator*() const;
Ptr operator->() const;
reverse_bidirectional_iterator& operator++();
reverse_bidirectional_iterator operator++(int);
reverse_bidirectional_iterator& operator--();
reverse_bidirectional_iterator operator--();
protected:
BidIt current;
};
The template class describes an object that behaves like a bidirectional iterator of class
iterator
<bidirectional_iterator_tag,
T
,
Dist
>
. It stores a bidirectional iterator of type BidIt
in the
protected object current
. Incrementing the object x
of type reverse_bidirectional_iterator
decrements
x.current
, and decrementing x
increments x.current
. Moreover, the expression *x
evaluates to *--(tmp =
current)
(where tmp
is a temporary object of class BidIt
), of type Ref
. Typically, Ref
is type T&
.
Thus, you can use an object of class reverse_bidirectional_iterator
to access in reverse order a sequence
that is traversed in order by a bidirectional iterator.