Namespaces
Variants

std:: contiguous_iterator

From cppreference.net
Iterator library
Iterator concepts
contiguous_iterator
(C++20)


Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Défini dans l'en-tête <iterator>
(depuis C++20)

Le concept contiguous_iterator affine random_access_iterator en fournissant la garantie que les éléments désignés sont stockés de manière contiguë en mémoire.

Étant donné un itérateur i d'un type qui modélise contiguous_iterator , un sentinelle s et un entier non négatif n :

Cela signifie qu'un programme ne peut pas compter sur les effets secondaires du déréférencement, de l'incrémentation ou de la décrémentation d'un itérateur contigu i , car les fonctions de la bibliothèque standard peuvent opérer sur des pointeurs obtenus par std:: to_address ( i ) au lieu d'opérer directement sur i .

(depuis C++26)

Table des matières

Détermination du concept d'itérateur

La définition de ce concept est spécifiée via un alias template d'exposition uniquement /*ITER_CONCEPT*/ .

Afin de déterminer /*ITER_CONCEPT*/ < I > , soit ITER_TRAITS < I > dénotant I si la spécialisation std:: iterator_traits < I > est générée à partir du modèle primaire, ou std:: iterator_traits < I > sinon :

  • Si ITER_TRAITS < I > :: iterator_concept est valide et désigne un type, /*ITER_CONCEPT*/ < I > dénote ce type.
  • Sinon, si ITER_TRAITS < I > :: iterator_category est valide et désigne un type, /*ITER_CONCEPT*/ < I > dénote ce type.
  • Sinon, si std:: iterator_traits < I > est généré à partir du modèle primaire, /*ITER_CONCEPT*/ < I > dénote std::random_access_iterator_tag .
    (C'est-à-dire que std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: contiguous_iterator_tag > est supposé être false .)
  • Sinon, /*ITER_CONCEPT*/ < I > ne dénote pas un type et entraîne un échec de substitution.

Exigences sémantiques

Soient a et b des itérateurs déréférençables et c un itérateur non déréférençable de type I tels que b soit accessible depuis a et c soit accessible depuis b , le type I modélise contiguous_iterator seulement si tous les concepts qu'il subsume sont modélisés et si toutes les conditions suivantes sont satisfaites :

Préservation de l'égalité

Les expressions déclarées dans les requires expressions des concepts de la bibliothèque standard doivent être equality-preserving (sauf indication contraire).

Variations d'expression implicite

Une requires expression qui utilise une expression non modifiante pour un opérande constant lvalue requiert également les variations d'expression implicites .

Notes

contiguous_iterator est modélisé par chaque type de pointeur vers un type d'objet complet.

Les types d'itérateurs dans la bibliothèque standard qui doivent satisfaire les exigences LegacyContiguousIterator en C++17 doivent également modéliser contiguous_iterator en C++20.

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR S'applique à Comportement publié Comportement corrigé
LWG 3607 C++20 contiguous_iterator pourrait avoir des comportements personnalisés
ranges::iter_move et ranges::iter_swap
interdit
LWG 4170 C++20 une paire d'itérateurs contiguous_iterator initialisés par valeur
pourrait ne pas pouvoir représenter une plage vide
garanti

Voir aussi

spécifie qu'un bidirectional_iterator est un itérateur à accès aléatoire, prenant en charge l'avancement en temps constant et l'indexation
(concept)