Namespaces
Variants

C++ named requirements: LegacyBidirectionalIterator

From cppreference.net
C++ named requirements

Un LegacyBidirectionalIterator est un LegacyForwardIterator qui peut être déplacé dans les deux directions (c'est-à-dire incrémenté et décrémenté).

Si un LegacyBidirectionalIterator it provient d'un Container , alors le value_type de it est le même que celui du conteneur, donc le déréférencement ( * it ) obtient le value_type du conteneur.

Table des matières

Exigences

Le type It satisfait LegacyBidirectionalIterator si

Et, étant donné

Les expressions suivantes doivent être valides et avoir leurs effets spécifiés :

Expression Retour Expression équivalente Notes
-- a It& Préconditions :
  • a est décrémentable (il existe b tel que a == ++ b )

Postconditions :

  • a est déréférençable
  • -- ( ++ a ) == a
  • Si -- a == -- b alors a == b
  • a et -- a désignent le même objet itérateur
a -- convertible en const It & It temp = a ;

-- a ;

return temp ;
* a -- reference

Un itérateur bidirectionnel mutable LegacyBidirectionalIterator est un LegacyBidirectionalIterator qui satisfait également les exigences du LegacyOutputIterator .

Notes

L'itérateur de début n'est pas décrémentable et le comportement est indéfini si -- container. begin ( ) est évalué.

Un itérateur bidirectionnel n'a pas besoin d'être déréférençable pour être décrémentable (en particulier, l'itérateur de fin n'est pas déréférençable mais est décrémentable).

Concept

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

template < class I >

concept __LegacyBidirectionalIterator =
__LegacyForwardIterator < I > && requires ( I i )
{
{ -- i } - > std:: same_as < I & > ;
{ i -- } - > std:: convertible_to < const I & > ;
{ * i -- } - > std:: same_as < std:: iter_reference_t < I >> ;

} ;

où le concept à titre d'exposition uniquement __LegacyForwardIterator est décrit dans LegacyForwardIterator .

(depuis 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 Appliqué à Comportement publié Comportement corrigé
LWG 299
( N3066 )
C++98 le type de retour de * a -- devait être
convertible en T
modifié le type de
retour en reference [1]
LWG 383 C++98 b devait être déréférençable après -- a a doit être déréférençable à la place
LWG 1212
( N3066 )
C++98 le type de retour de * a -- ne correspondait pas au type de
retour de * a ++ requis par LegacyForwardIterator
modifié le type de
retour en reference
  1. Ce problème a été initialement résolu par N2758 (concepts d'itérateurs), qui a été ultérieurement retiré de la norme C++.

Voir aussi

spécifie qu'un forward_iterator est un itérateur bidirectionnel, prenant en charge le déplacement vers l'arrière
(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