std::experimental::ranges:: BidirectionalIterator
|
Défini dans l'en-tête
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
bool
BidirectionalIterator
=
|
(ranges TS) | |
Le concept
BidirectionalIterator<I>
affine
ForwardIterator
en ajoutant la capacité de déplacer un itérateur vers l'arrière.
Un itérateur bidirectionnel
r
est dit
décrémentable
si et seulement s'il existe un certain
s
tel que
++
s
==
r
. Tous les itérateurs décrémentables
r
doivent être dans le domaine des expressions
--
r
et
r
--
.
Soient
a
et
b
des objets décrémentables de type
I
.
BidirectionalIterator<I>
est satisfait seulement si :
- Le pré-décrémenteur produit une lvalue qui se réfère à l'opérande : std:: addressof ( -- a ) == std:: addressof ( a ) .
- Le post-décrémenteur produit la valeur précédente de l'opérande : si bool ( a == b ) , alors bool ( a -- == b ) .
- Le post-décrémenteur et le pré-décrémenteur effectuent la même modification sur leur opérande : Si bool ( a == b ) , alors après l'évaluation de a -- et -- b , bool ( a == b ) reste vrai.
- L'incrémentation et la décrémentation sont des opérations inverses l'une de l'autre :
-
-
Si
aest incrémentable et bool ( a == b ) , alors bool ( -- ( ++ a ) == b ) . - Si bool ( a == b ) , alors bool ( ++ ( -- a ) == b ) .
-
Si
Préservation de l'égalité
Une expression est préservatrice d'égalité si elle produit des résultats égaux pour des entrées égales.
- Les entrées d'une expression consistent en ses opérandes.
- Les sorties d'une expression consistent en son résultat et tous les opérandes modifiés par l'expression (le cas échéant).
Toute expression devant préserver l'égalité doit en outre être stable : deux évaluations d'une telle expression avec les mêmes objets d'entrée doivent produire des sorties égales en l'absence de toute modification explicite intervenant entre-temps sur ces objets d'entrée.
Sauf indication contraire, toute expression utilisée dans une requires-expression doit être égalité-préservante et stable, et l'évaluation de l'expression ne peut modifier que ses opérandes non constants. Les opérandes constants ne doivent pas être modifiés.