Namespaces
Variants

std::experimental::ranges:: WeaklyIncrementable

From cppreference.net
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 Gleichheit erhaltend zu sein */
i ++ ; /* nicht erforderlich Gleichheit erhaltend 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 sowohl im Definitionsbereich des Prä- als auch des Post-Inkrements liegt. WeaklyIncrementable<I> ist nur dann erfüllt, wenn:

  • ++ i und i ++ haben denselben Definitionsbereich;
  • Wenn i inkrementierbar ist, dann:
    • ++ i und i ++ erhöhen beide i auf das nächste Element; und
    • ++ i referenziert dasselbe Objekt wie i .

Gleichheitserhaltung

Ein Ausdruck ist gleichheitserhaltend , wenn er bei gleichen Eingaben gleiche Ausgaben liefert.

  • Die Eingaben eines Ausdrucks bestehen aus seinen Operanden.
  • Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen durch den Ausdruck modifizierten Operanden (falls vorhanden).

Jeder Ausdruck, der gleichungserhaltend sein muss, muss darüber hinaus stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, sofern keine explizite Änderung dieser Eingabeobjekte zwischen den Auswertungen erfolgt.

Hinweise

Für WeaklyIncrementable -Typen impliziert a gleich b nicht, dass ++ a gleich ++ b ist. Algorithmen für solche Typen sollten Single-Pass sein und niemals versuchen, denselben Wert zweimal zu durchlaufen.