C++ named requirements: LegacyBidirectionalIterator
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
-
Le type
Itsatisfait LegacyForwardIterator
Et, étant donné
-
a
et
b
, lvalues de type
It -
reference, le type désigné par std:: iterator_traits < It > :: reference
Les expressions suivantes doivent être valides et avoir leurs effets spécifiés :
| Expression | Retour | Expression équivalente | Notes |
|---|---|---|---|
| -- a |
It&
|
Préconditions :
Postconditions :
|
|
| a -- | convertible en const It & |
It temp
=
a
;
--
a
;
|
|
| * 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).
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
|
(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
|
- ↑ 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
|
(C++20)
|
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 |