# C++ concepts: BidirectionalIterator

From cppreference.com
< cpp‎ | concept

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

### Requirements

The type `It` satisfies `BidirectionalIterator` if

- The type `It` satisfies `ForwardIterator`

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

- Iterator library

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/concept/BidirectionalIterator&oldid=79180"