C++ named requirements: LegacyIterator
Les LegacyIterator exigences décrivent les types qui peuvent être utilisés pour identifier et parcourir les éléments d'un conteneur.
LegacyIterator est l'ensemble de base des exigences utilisées par les autres types d'itérateurs : LegacyInputIterator , LegacyOutputIterator , LegacyForwardIterator , LegacyBidirectionalIterator , et LegacyRandomAccessIterator . Les itérateurs peuvent être considérés comme une abstraction des pointeurs.
Toutes les catégories d'itérateurs ne requièrent que les fonctions réalisables pour une catégorie donnée en temps constant (amorti). Par conséquent, les tables d'exigences et les définitions de concepts (depuis C++20) pour les itérateurs ne spécifient pas de complexité.
Table des matières |
Exigences
Le type
It
satisfait
LegacyIterator
si
-
Le type
Itsatisfait CopyConstructible , et -
Le type
Itsatisfait CopyAssignable , et -
Le type
Itsatisfait Destructible , et -
Le type
Itsatisfait Swappable , et -
std::
iterator_traits
<
It
>
possède les typedefs membres :
value_type, (jusqu'en C++20)difference_type,reference,pointer, etiterator_category, et -
Étant donné
r
, une lvalue de type
It, les expressions suivantes doivent être valides et avoir leurs effets spécifiés :
| Expression | Type de retour | Précondition |
|---|---|---|
| * r | non spécifié | r est déréférençable |
| ++ r | It & | r est incrémentable (le comportement de l'expression ++ r est défini) |
ConceptPour la définition de std::iterator_traits , le concept suivant, à titre d'exposition uniquement, est défini.
où le concept à titre d'exposition uniquement
__Referenceable
<
T
>
est satisfait si et seulement si
T
&
est un type valide (en particulier,
|
(depuis C++20) |
Notes
Note sur la terminologie : Le tableau suivant présente les noms utilisés sur ce site et les noms correspondants dans la norme C++ (ayant la même signification). Le préfixe "Legacy" (et "Cpp17") met l'accent sur la compatibilité avec les normes antérieures à C++20 et est utilisé pour distinguer ces exigences des nouveaux concepts d'itérateur introduits avec C++20.
| Noms cppreference | Noms du standard C++ | Concepts d'itérateurs C++20 |
|---|---|---|
| LegacyIterator |
Cpp17Iterator
|
input_or_output_iterator
|
| LegacyInputIterator |
Cpp17InputIterator
|
input_iterator
|
| LegacyOutputIterator |
Cpp17OutputIterator
|
output_iterator
|
| LegacyForwardIterator |
Cpp17ForwardIterator
|
forward_iterator
|
| LegacyBidirectionalIterator |
Cpp17BidirectionalIterator
|
bidirectional_iterator
|
| LegacyRandomAccessIterator |
Cpp17RandomAccessIterator
|
random_access_iterator
|
| LegacyContiguousIterator [1] |
contiguous_iterator
|
- ↑ LegacyContiguousIterator n'a été formellement spécifié qu'en C++17, mais les itérateurs de std::vector , std::basic_string , std::array , et std::valarray , ainsi que les pointeurs vers les tableaux C sont souvent traités comme une catégorie distincte dans le code pré-C++17.
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 | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2437 | C++98 |
*
r
doit être
reference
|
non requis pour les itérateurs de sortie |
| LWG 3420 | C++20 |
le concept d'exposition vérifie d'abord
copyable
|
copyable
est vérifié uniquement si l'expression requires renvoie true
|
Voir aussi
|
(C++20)
|
spécifie que les objets d'un type peuvent être incrémentés et déréférencés
(concept) |
| Bibliothèque d'itérateurs | fournit des définitions pour les itérateurs, les traits d'itérateurs, les adaptateurs et les fonctions utilitaires |