23
Iterators library
[iterators]
23.3
Iterator requirements
[iterator.requirements]
23.3.5
C++17 iterator requirements
[iterator.cpp17]
23.3.5.6
Bidirectional iterators
[bidirectional.iterators]
1
#
A class or pointer type
X
meets the requirements of a bidirectional iterator if, in addition to meeting the
Cpp17ForwardIterator
requirements, the following expressions are valid as shown in Table
88
.
Table
88
:
Cpp17BidirectionalIterator
requirements (in addition to
Cpp17ForwardIterator
)
[tab:bidirectionaliterator]
🔗
Expression
Return type
Operational
Assertion/note
🔗
semantics
pre-/post-condition
🔗
-
-
r
X
&
Preconditions
: there exists
s
such that
r
=
=
+
+
s
.
Postconditions
:
r
is dereferenceable
.
-
-
(
+
+
r
)
=
=
r
.
-
-
r
=
=
-
-
s
implies
r
=
=
s
.
addressof
(
r
)
=
=
addressof
(
-
-
r
)
.
🔗
r
-
-
convertible to
const
X
&
{
X tmp
=
r;
-
-
r;
return
tmp;
}
🔗
*
r
-
-
reference
2
#
[
Note
1
:
Bidirectional iterators allow algorithms to move iterators backward as well as forward
.
—
end note
]