C++ named requirements: BidirectionalIterator

From cppreference.com
< cpplrm; | named req

A BidirectionalIterator is a ForwardIterator that can be moved in both directions (i.e. incremented and decremented).

Requirements

The type It satisfies BidirectionalIterator if

And, given

  • a and b, iterators of type It
  • reference, the type denoted by std::iterator_traits<It>::reference

The following expressions must be valid and have their specified effects

Expression Return Equivalent expression Notes
--a It& Preconditions:
  • a is decrementable (there exists such b that a == ++b)

Postconditions:

  • a is dereferenceable
  • --(++a) == a
  • If --a == --b then a == b
  • &a == &--a
a-- convertible to const It& It temp = a;

--a;

return temp;
*a-- reference

A mutable BidirectionalIterator is a BidirectionalIterator that additionally satisfies the OutputIterator requirements.

Notes

The begin iterator is not decrementable and the behavior is undefined if --container.begin() is evaluated.

A bidirectional iterator does not have to be dereferenceable to be decrementable (in particular, the end iterator is not dereferenceable but is decrementable)

See also

specifies that a ForwardIterator is a bidirectional interator, supporting movement backwards
(concept)