Namespaces
Variants

C++ named requirements: LegacyIterator

From cppreference.net
C++ named requirements

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 It satisfait CopyConstructible , et
  • Le type It satisfait CopyAssignable , et
  • Le type It satisfait Destructible , et
  • Le type It satisfait Swappable , et
  • std:: iterator_traits < It > possède les typedefs membres : value_type , (jusqu'en C++20) difference_type , reference , pointer , et iterator_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)

Concept

Pour la définition de std::iterator_traits , le concept suivant, à titre d'exposition uniquement, est défini.

template < class I >

concept __LegacyIterator =
requires ( I i )
{
{ * i } - > __Referenceable ;
{ ++ i } - > std:: same_as < I & > ;
{ * i ++ } - > __Referenceable ;

} && std:: copyable < I > ;

où le concept à titre d'exposition uniquement __Referenceable < T > est satisfait si et seulement si T & est un type valide (en particulier, T ne doit pas être void ).

(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
  1. 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

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