A LegacyBidirectionalIterator is a LegacyForwardIterator that can be moved in both directions (i.e. incremented and decremented).
If a LegacyBidirectionalIterator it originates from a Container, then it's value_type is the same as the container's, so dereferencing (*it) obtains the container's value_type.
The type It satisfies LegacyBidirectionalIterator if.
It satisfies LegacyForwardIterator And, given.
a and b, lvalues 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:
Postconditions:
|
|
a-- | convertible to const It& |
It temp = a; --a; return temp; | |
*a-- | reference |
A mutable LegacyBidirectionalIterator is a LegacyBidirectionalIterator that additionally satisfies the LegacyOutputIterator requirements.
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).
ConceptFor the definition of
where the exposition-only concept | (since C++20) |
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 299 (N3066) | C++98 | the return type of *a-- was required to be convertible to T | the return type is required to be reference |
| LWG 383 | C++98 | b was required to be dereferenceable after --a | a is required to be dereferenceable instead |
|
(C++20) | specifies that a forward_iterator is a bidirectional iterator, supporting movement backwards (concept) |
| Iterator library | provides definitions for iterators, iterator traits, adaptors, and utility functions |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator