std::experimental::ranges:: RandomAccessIterator
|
Definiert in Header
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
bool
RandomAccessIterator
=
|
(ranges TS) | |
Das Konzept
RandomAccessIterator<I>
erweitert
BidirectionalIterator
durch Hinzufügen von Unterstützung für konstante Zeit-Vorwärtsbewegung mit den Operatoren
+=
,
+
,
-=
, und
-
, konstanter Zeit-Berechnung von Distanzen mit
-
, sowie Array-Notation mit Indexierung.
Seien
a
und
b
gültige Iteratoren vom Typ
I
, sodass
b
von
a
aus erreichbar ist, und sei
n
ein Wert vom Typ
ranges
::
difference_type_t
<
I
>
gleich
b
-
a
.
RandomAccessIterator<I>
ist nur dann erfüllt, wenn:
- ( a + = n ) ist gleich b .
- std:: addressof ( a + = n ) ist gleich std:: addressof ( a ) .
- ( a + n ) ist gleich ( a + = n ) .
- ( a + n ) ist gleich ( n + a ) .
-
Für zwei beliebige positive Ganzzahlen
xundy, falls a + ( x + y ) gültig ist, dann ist a + ( x + y ) gleich ( a + x ) + y . - a + 0 ist gleich a .
- Falls ( a + ( n - 1 ) ) gültig ist, dann ist -- b gleich ( a + ( n - 1 ) ) .
- ( b + = - n ) und ( b - = n ) sind beide gleich a .
- std:: addressof ( b - = n ) ist gleich std:: addressof ( b ) .
- ( b - n ) ist gleich ( b - = n ) .
- Falls b dereferenzierbar ist, dann ist a [ n ] gültig und gleich * b .
- bool ( a <= b ) ist true .
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.
Sofern nicht anders angegeben, muss jeder Ausdruck, der in einem requires-expression verwendet wird, 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.
Implizite Ausdrucksvarianten
Ein requires-expression , der einen Ausdruck verwendet, der für einen konstanten Lvalue-Operanden nicht-modifizierend ist, erfordert implizit auch zusätzliche Variationen dieses Ausdrucks, die einen nicht-konstanten Lvalue oder (möglicherweise konstanten) Rvalue für den gegebenen Operanden akzeptieren, sofern nicht eine solche Ausdrucksvariation explizit mit abweichender Semantik gefordert wird. Diese impliziten Ausdrucksvariationen müssen denselben semantischen Anforderungen genügen wie der deklarierte Ausdruck. Das Ausmaß, in dem eine Implementierung die Syntax der Variationen überprüft, ist nicht spezifiziert.