std::experimental::ranges:: WeaklyIncrementable
|
Definiert im Header
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
bool
WeaklyIncrementable
=
|
(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.