C++ benannte Anforderungen: ReversibleContainer
Ein ReversibleContainer ist ein Container, der Iteratoren hat, welche die Anforderungen von entweder LegacyBidirectionalIterator oder LegacyRandomAccessIterator erfüllen. Solche Iteratoren erlauben es einem ReversibleContainer, rückwärts durchlaufen zu werden.
Inhalt |
[bearbeiten] Anforderungen
Ein Typ erfüllt ReversibleContainer, wenn er Container erfüllt, sein Iteratortyp zu den bidirektionalen oder zufälligen Zugriffskategorien der Iteratoren gehört und unter Berücksichtigung der folgenden Typen und Werte die semantischen und Komplexitätsanforderungen in den nachstehenden Tabellen erfüllt werden.
| Typ | Definition |
X
|
ein ReversibleContainer-Typ |
T
|
der value_type von X |
| Wert | Definition |
| a | ein Wert vom Typ X |
[bearbeiten] Typen
| Name | Typ | Anforderungen |
|---|---|---|
| typename X::reverse_iterator | std::reverse_iterator<X::iterator> | ein Iteratortyp, dessen Werttyp T ist |
| typename X::const_reverse_iterator | std::reverse_iterator<X::const_iterator> | ein konstanter Iteratortyp, dessen Werttyp T ist |
[bearbeiten] Ausdrücke
Die Typen reverse_iterator und const_reverse_iterator in der folgenden Tabelle bezeichnen typename X::reverse_iterator bzw. typename X::const_reverse_iterator.
| Ausdruck | Typ | Semantik | Komplexität |
|---|---|---|---|
| a.rbegin() | reverse_iteratorconst_reverse_iterator für konstantes a |
reverse_iterator(a.end()) | Konstante |
| a.rend() | reverse_iteratorconst_reverse_iterator für konstantes a |
reverse_iterator(a.begin()) | Konstante |
| a.crbegin() | const_reverse_iterator
|
const_cast<const X&>(a).rbegin() | Konstante |
| a.crend() | const_reverse_iterator
|
const_cast<const X&>(a).rend() | Konstante |
[bearbeiten] Bibliothekstypen
Die folgenden Standardbibliothekstypen erfüllen die Anforderungen von ReversibleContainer.
| (C++11) |
fest dimensioniertes, inplace, zusammenhängendes Array (Klassenvorlage) |
| Doppelt-endende Warteschlange (Klassenvorlage) | |
| Doppelt verkettete Liste (Klassenvorlage) | |
| reservierbares, zusammenhängendes Array (Klassenvorlage) | |
| (C++26) |
reservierbares, festes Kapazitäts-Array, Inplace, zusammenhängend (Klassenvorlage) |
| Sammlung von Schlüssel-Wert-Paaren, sortiert nach Schlüsseln, Schlüssel sind eindeutig (Klassenvorlage) | |
| Sammlung von Schlüssel-Wert-Paaren, sortiert nach Schlüsseln (Klassenvorlage) | |
| Sammlung eindeutiger Schlüssel, sortiert nach Schlüsseln (Klassenvorlage) | |
| Sammlung von Schlüsseln, sortiert nach Schlüsseln (Klassenvorlage) |
[bearbeiten] Beispiel
Das folgende Beispiel iteriert rückwärts über einen vector (der Legacy-Zufallszugriffsiteratoren hat).
#include <iostream> #include <vector> int main() { std::vector<int> v = {3, 1, 4, 1, 5, 9}; for (std::vector<int>::const_reverse_iterator i{v.crbegin()}; i != v.crend(); ++i) std::cout << *i << ' '; std::cout << '\n'; }
Ausgabe
9 5 1 4 1 3
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2105 | C++98 | typename X::const_reverse_iterator war als ein Iteratortyp mit dem Werttyp const T erforderlich |
als ein konstanter Iteratortyp mit dem Werttyp T erforderlich |