Namespaces
Variants

std::experimental::ranges:: Iterator

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

concept bool Iterator =
requires ( I i ) {
{ * i } - > auto && ; // Nécessite : i est déréférençable
} &&

WeaklyIncrementable < I > ;
(ranges TS)

Le Iterator concept constitue la base de la taxonomie des concepts d'itérateurs ; chaque itérateur satisfait aux Iterator exigences.

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.

Notes

Iterator lui-même ne spécifie que les opérations de déréférencement et d'incrémentation d'un itérateur. La plupart des algorithmes nécessiteront des opérations supplémentaires, par exemple :

La - > auto && contrainte implique que le type résultant de la déréférence ne peut pas être void .