Namensräume
Varianten
Aktionen

std::experimental::ranges::Iterator

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Iterator-Bibliothek
Iterator-Konzepte
Indirekte aufrufbare Konzepte
                                                  
                                                  
                                                  
Gemeinsame Algorithmus-Anforderungen
                                                  
Konzept-Dienstprogramme
Iterator-Dienstprogramme und -Operationen
Iterator-Traits
Iterator-Adapter
Stream-Iteratoren
 
Definiert in Header <experimental/ranges/iterator>
template< class I >

concept bool Iterator =
    requires(I i) {
        { *i } -> auto&&; // Erfordert: i ist dereferenzierbar
    } &&

    WeaklyIncrementable<I>;
(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

Die Einschränkung -> auto&& impliziert, dass der Ergebnistyp der Dereferenzierung nicht void sein kann.