Namensräume
Varianten
Aktionen

std::experimental::ranges::WeaklyIncrementable

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Iterator-Bibliothek
Iterator-Konzepte
WeaklyIncrementable
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 WeaklyIncrementable =
    Semiregular<I> &&
    requires(I i) {
        typename ranges::difference_type_t<I>;
        requires SignedIntegral<ranges::difference_type_t<I>>;
        { ++i } -> Same<I>&; /* nicht erforderlich, gleichheitserhaltend zu sein */
        i++; /* nicht erforderlich, gleichheitserhaltend zu sein */

    };
(Ranges TS)

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

Sei i ein Objekt vom Typ I. i wird als *inkrementierbar* bezeichnet, wenn es im Definitionsbereich sowohl des Prä- als auch des Post-Inkrements liegt. WeaklyIncrementable<I> ist nur dann erfüllt, wenn

  • ++i und i++ denselben Definitionsbereich haben;
  • Wenn i inkrementierbar ist, dann
    • ++i und i++ befördern beide i zum nächsten Element; und
    • ++i bezieht sich auf dasselbe Objekt wie i.

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

[bearbeiten] Hinweise

Bei WeaklyIncrementable-Typen impliziert a gleich b nicht, dass ++a gleich ++b ist. Algorithmen auf solchen Typen sollten Einzelpass-Algorithmen sein und niemals versuchen, denselben Wert zweimal zu durchlaufen.