std::experimental::ranges::Iterator
| Definiert in Header <experimental/ranges/iterator> |
||
| template< class I > concept bool Iterator = |
(Ranges TS) | |
Das Konzept Iterator bildet die Grundlage für die Iterator-Konzept-Taxonomie; jeder Iterator erfüllt die Iterator-Anforderungen.
[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.
[edit] Hinweise
Iterator selbst spezifiziert nur Operationen zum Dereferenzieren und Inkrementieren eines Iterators. Die meisten Algorithmen erfordern zusätzliche Operationen, zum Beispiel
- das Vergleichen von Iteratoren mit Sentinels (siehe
Sentinel); - das Lesen von Werten aus einem Iterator (siehe
ReadableundInputIterator); - das Schreiben von Werten in einen Iterator (siehe
WritableundOutputIterator); - eine reichhaltigere Menge an Iterator-Bewegungen (siehe
ForwardIterator,BidirectionalIterator,RandomAccessIterator).
Die Einschränkung -> auto&& impliziert, dass der Ergebnistyp der Dereferenzierung nicht void sein kann.