std::experimental::ranges::BidirectionalIterator
| Definiert in Header <experimental/ranges/iterator> |
||
| template< class I > concept bool BidirectionalIterator = |
(Ranges TS) | |
Das Konzept BidirectionalIterator<I> verfeinert ForwardIterator um die Möglichkeit, einen Iterator rückwärts zu bewegen.
Ein bidirektionaler Iterator r wird als dekrementierbar bezeichnet, wenn und nur wenn ein s existiert, so dass ++s == r. Alle dekrementierbaren Iteratoren r müssen im Definitionsbereich der Ausdrücke --r und r-- liegen.
Seien a und b dekrementierbare Objekte vom Typ I. BidirectionalIterator<I> ist nur dann erfüllt, wenn
- Die Prä-Dekrementierung einen L-Wert liefert, der auf den Operanden verweist: std::addressof(--a) == std::addressof(a).
- Die Post-Dekrementierung liefert den vorherigen Wert des Operanden: Wenn bool(a == b) gilt, dann gilt bool(a-- == b).
- Post-Dekrementierung und Prä-Dekrementierung modifizieren ihren Operanden auf die gleiche Weise: Wenn bool(a == b) gilt, dann gilt nach der Auswertung von sowohl a-- als auch --b immer noch bool(a == b).
- Inkrement und Dekrement sind inverse Operationen zueinander
- Wenn
ainkrementierbar ist und bool(a == b) gilt, dann gilt bool(--(++a) == b). - Wenn bool(a == b) gilt, dann gilt bool(++(--a) == b).
- Wenn
[bearbeiten] Gleichheitserhaltung
Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.
- Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
- Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem Ausdruck modifizierten Operanden (falls vorhanden).
Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.
Sofern nicht anders angegeben, muss jeder in einem requires-expression verwendete Ausdruck gleichheitserhaltend und stabil sein, und die Auswertung des Ausdrucks darf nur seine nicht-konstanten Operanden modifizieren. Operanden, die konstant sind, dürfen nicht modifiziert werden.