Namespaces
Variants

C++ named requirements: LegacyBidirectionalIterator

From cppreference.net
C++ named requirements

Ein LegacyBidirectionalIterator ist ein LegacyForwardIterator , der in beide Richtungen bewegt werden kann (d.h. inkrementiert und dekrementiert).

Wenn ein LegacyBidirectionalIterator it von einem Container stammt, dann ist it 's value_type identisch mit dem des Containers, daher ergibt die Dereferenzierung ( * it ) den value_type des Containers.

Inhaltsverzeichnis

Anforderungen

Der Typ It erfüllt die Anforderungen von LegacyBidirectionalIterator wenn

Und, gegeben

Die folgenden Ausdrücke müssen gültig sein und ihre spezifizierten Effekte haben:

Ausdruck Rückgabe Äquivalenter Ausdruck Anmerkungen
-- a It& Vorbedingungen:
  • a ist dekrementierbar (es existiert ein b so dass a == ++ b )

Nachbedingungen:

  • a ist dereferenzierbar
  • -- ( ++ a ) == a
  • Wenn -- a == -- b dann a == b
  • a und -- a bezeichnen dasselbe Iterator-Objekt
a -- konvertierbar zu const It & It temp = a ;

-- a ;

return temp ;
* a -- reference

Ein mutable LegacyBidirectionalIterator ist ein LegacyBidirectionalIterator , der zusätzlich die Anforderungen eines LegacyOutputIterator erfüllt.

Hinweise

Der Begin-Iterator ist nicht dekrementierbar und das Verhalten ist undefiniert, wenn -- container. begin ( ) ausgewertet wird.

Ein bidirektionaler Iterator muss nicht dereferenzierbar sein, um dekrementierbar zu sein (insbesondere ist der End-Iterator nicht dereferenzierbar, aber dekrementierbar).

Konzept

Für die Definition von std::iterator_traits wird das folgende, nur zur Darstellung dienende Konzept definiert.

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 >> ;

} ;

wobei das nur zur Darstellung dienende Konzept __LegacyForwardIterator in LegacyForwardIterator beschrieben wird.

(seit C++20)

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 299
( N3066 )
C++98 Der Rückgabetyp von * a -- musste konvertierbar zu T sein Änderung des Rückgabe-
typs zu reference [1]
LWG 383 C++98 b musste nach -- a dereferenzierbar sein a muss stattdessen dereferenzierbar sein
LWG 1212
( N3066 )
C++98 Der Rückgabetyp von * a -- entsprach nicht dem Rückgabe-
typ von * a ++ wie von LegacyForwardIterator gefordert
Änderung des Rückgabe-
typs zu reference
  1. Dieses Problem wurde ursprünglich durch N2758 (Iterator-Konzepte) gelöst, das später aus dem C++-Standard entfernt wurde.

Siehe auch

spezifiziert, dass ein forward_iterator ein bidirektionaler Iterator ist, der Rückwärtsbewegung unterstützt
(Konzept)
Iterator-Bibliothek stellt Definitionen für Iteratoren, Iterator-Traits, Adapter und Hilfsfunktionen bereit