Namespaces
Variants

std::experimental::ranges:: BidirectionalIterator

From cppreference.net
Défini dans l'en-tête <experimental/ranges/iterator>
template < class I >

concept bool BidirectionalIterator =
ForwardIterator < I > &&
DerivedFrom < ranges :: iterator_category_t < I > , ranges :: bidirectional_iterator_tag > &&
requires ( I i ) {
{ -- i } - > Same < I > & ;
{ i -- } - > Same < I > && ;

} ;
(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 a est incrémentable et bool ( a == b ) , alors bool ( -- ( ++ a ) == b ) .
  • Si bool ( a == b ) , alors bool ( ++ ( -- a ) == b ) .

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.