Namensräume
Varianten
Aktionen

std::experimental::ranges::Incrementable

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 >

Konzept bool Incrementable =
    Regular<I> &&
    WeaklyIncrementable<I> &&
    requires(I i) {
        { i++ } -> Same<I>&&;

    };
(Ranges TS)

Das Konzept Incrementable<I> spezifiziert die Anforderungen an einen Typ, der inkrementiert werden kann (mit den Prä- und Post-Inkrement-Operatoren). Die Inkrementoperationen (einschließlich der von WeaklyIncrementable geforderten) müssen gleichheitserhaltend sein und der Typ muss EqualityComparable sein.

Seien a und b inkrementierbare Objekte vom Typ I. Incrementable<I> ist nur dann erfüllt, wenn

  • Wenn bool(a == b) dann bool(a++ == b).
  • Wenn bool(a == b) dann bool(void(a++), a) == ++b).

[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.

[bearbeiten] Hinweise

Die Anforderung, dass a gleich b ist, impliziert, dass ++a gleich ++b ist, was die Verwendung von Multi-Pass-Algorithmen mit Incrementable-Typen ermöglicht.