C++ named requirements: LegacyIterator
Die LegacyIterator -Anforderungen beschreiben Typen, die verwendet werden können, um Elemente eines Containers zu identifizieren und zu durchlaufen.
LegacyIterator ist die grundlegende Anforderungsmenge, die von anderen Iteratortypen verwendet wird: LegacyInputIterator , LegacyOutputIterator , LegacyForwardIterator , LegacyBidirectionalIterator und LegacyRandomAccessIterator . Iteratoren können als Abstraktion von Zeigern betrachtet werden.
Alle Kategorien von Iteratoren fordern nur diejenigen Funktionen, die für eine gegebene Kategorie in konstanter Zeit (amortisiert) realisierbar sind. Daher spezifizieren Anforderungstabellen und Konzeptdefinitionen (since C++20) für die Iteratoren keine Komplexität.
Inhaltsverzeichnis |
Anforderungen
Der Typ
It
erfüllt
LegacyIterator
wenn
-
Der Typ
Iterfüllt CopyConstructible , und -
Der Typ
Iterfüllt CopyAssignable , und -
Der Typ
Iterfüllt Destructible , und -
Der Typ
Iterfüllt Swappable , und -
std::
iterator_traits
<
It
>
besitzt die Member-Typdefinitionen:
value_type, (bis C++20)difference_type,reference,pointer, unditerator_category, und -
Gegeben
r
, ein L-Wert vom Typ
It, müssen die folgenden Ausdrücke gültig sein und ihre spezifizierten Effekte haben:
| Ausdruck | Rückgabetyp | Vorbedingung |
|---|---|---|
| * r | nicht spezifiziert | r ist dereferenzierbar |
| ++ r | It & | r ist inkrementierbar (das Verhalten des Ausdrucks ++ r ist definiert) |
ConceptFür die Definition von std::iterator_traits wird das folgende, nur zur Darstellung dienende Concept definiert.
wobei das nur zur Darstellung dienende Concept
__Referenceable
<
T
>
genau dann erfüllt ist, wenn
T
&
ein gültiger Typ ist (insbesondere darf
|
(seit C++20) |
Hinweise
Hinweis zur Terminologie: Die folgende Tabelle zeigt die auf dieser Seite verwendeten Namen und die entsprechenden C++-Standard-Namen (mit gleicher Bedeutung). Das "Legacy"- (und "Cpp17")-Präfix betont die Kompatibilität mit vor-C++20-Standards und wird verwendet, um diese Anforderungen von den neuen Iterator-Konzepten zu unterscheiden, die mit C++20 eingeführt wurden.
- ↑ LegacyContiguousIterator Kategorie wurde erst in C++17 formal spezifiziert, aber die Iteratoren von std::vector , std::basic_string , std::array und std::valarray , sowie Zeiger auf C-Arrays wurden in pre-C++17-Code oft als separate Kategorie behandelt.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Veröffentlichtes Verhalten | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2437 | C++98 |
*
r
muss ein
reference
sein
|
nicht für Output-Iteratoren erforderlich |
| LWG 3420 | C++20 |
das nur-expositionelle Konzept prüft zuerst
copyable
|
copyable
wird nur geprüft, wenn der Requires-Ausdruck true ergibt
|
Siehe auch
|
(C++20)
|
spezifiziert, dass Objekte eines Typs inkrementiert und dereferenziert werden können
(Konzept) |
| Iterator-Bibliothek | stellt Definitionen für Iteratoren, Iterator-Traits, Adapter und Hilfsfunktionen bereit |