std::experimental::ranges:: ForwardIterator
| Technical Specification | ||||
| Filesystem library (filesystem TS) | ||||
| Library fundamentals (library fundamentals TS) | ||||
| Library fundamentals 2 (library fundamentals TS v2) | ||||
| Library fundamentals 3 (library fundamentals TS v3) | ||||
| Extensions for parallelism (parallelism TS) | ||||
| Extensions for parallelism 2 (parallelism TS v2) | ||||
| Extensions for concurrency (concurrency TS) | ||||
| Extensions for concurrency 2 (concurrency TS v2) | ||||
| Concepts (concepts TS) | ||||
| Ranges (ranges TS) | ||||
| Reflection (reflection TS) | ||||
| Mathematical special functions (special functions TR) | ||||
| Experimental Non-TS | ||||
| Pattern Matching | ||||
| Linear Algebra | ||||
| std::execution | ||||
| Contracts | ||||
| 2D Graphics |
| Iterator concepts | |||||||||||||||||||||||
|
|||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||
| Concept utilities | |||||||||||||||||||||||
| Iterator utilities and operations | |||||||||||||||||||||||
| Iterator traits | |||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||
| Stream iterators | |||||||||||||||||||||||
|
Definiert im Header
<experimental/ranges/iterator>
|
||
|
template
<
class
I
>
concept
bool
ForwardIterator
=
|
(ranges TS) | |
Das Konzept
ForwardIterator<I>
erweitert
InputIterator
durch Hinzufügen von Gleichheitsvergleichen und der Multi-Pass-Garantie.
Der Definitionsbereich von
==
für Forward-Iteratoren ist der von Iteratoren über derselben zugrundeliegenden Sequenz, mit der Ausnahme, dass wertinitialisierte Iteratoren desselben Typs miteinander verglichen werden können und gleich vergleichen sollen.
Zeiger und Referenzen, die von einem Forward-Iterator in einen Bereich erhalten werden
[
i
,
s
)
müssen gültig bleiben, solange
[
i
,
s
)
weiterhin einen Bereich bezeichnet.
Seien
a
und
b
zwei dereferenzierbare Iteratoren vom Typ
I
.
ForwardIterator<I>
ist nur dann erfüllt, wenn:
- a == b impliziert ++ a == ++ b ; und
-
Der Ausdruck
(
[
]
(
X x
)
{
++
x
;
}
(
a
)
,
*
a
)
ist äquivalent zu
*
a
, d.h. das Inkrementieren einer Kopie von
ahat keine Auswirkung auf das Ergebnis der Dereferenzierung vona.
Dies wird als multi-pass guarantee bezeichnet.
Hinweise
Ein Forward-Iterator kann nicht "stashing" sein: Er kann keine Referenz auf ein Objekt innerhalb seiner selbst zurückgeben, weil solche Referenzen durch die Zerstörung des Forward-Iterators ungültig werden würden.