std::experimental::ranges:: for_each
|
Definiert in Header
<experimental/ranges/algorithm>
|
||
|
template
<
InputIterator I, Sentinel
<
I
>
S,
class
Proj
=
ranges::
identity
,
IndirectUnaryInvocable
<
projected
<
I, Proj
>>
Fun
>
|
(1) | (ranges TS) |
|
template
<
InputRange R,
class
Proj
=
ranges::
identity
,
IndirectUnaryInvocable
<
projected
<
ranges::
iterator_t
<
R
>
, Proj
>>
Fun
>
|
(2) | (ranges TS) |
[
first
,
last
)
auf (d.h.
ranges::
invoke
(
f,
ranges::
invoke
(
proj,
*
i
)
)
), in Reihenfolge.
Für beide Überladungen gilt: Wenn der Iteratortyp veränderbar ist, f kann die Elemente des Bereichs durch den dereferenzierten Iterator modifizieren. Wenn f ein Ergebnis zurückgibt, wird das Ergebnis ignoriert.
Im Gegensatz zu den restlichen Algorithmen ist es for_each nicht gestattet, Kopien der Elemente in der Sequenz zu erstellen, selbst wenn sie trivial kopierbar sind.
Im Gegensatz zu
std::for_each
(welches nur
MoveConstructible
erfordert), benötigen diese Funktionen, dass
Fun
das Konzept
CopyConstructible
modelliert.
Ungeachtet der oben dargestellten Deklarationen sind die tatsächliche Anzahl und Reihenfolge der Template-Parameter für Algorithmusdeklarationen nicht spezifiziert. Daher ist das Programm wahrscheinlich nicht portabel, wenn explizite Template-Argumente beim Aufruf eines Algorithmus verwendet werden.
Inhaltsverzeichnis |
Parameter
| first, last | - | der Bereich, auf den die Funktion angewendet werden soll |
| r | - | der Bereich, auf den die Funktion angewendet werden soll |
| f | - | aufrufbares Objekt, das auf jedes projizierte Element im Bereich angewendet werden soll |
| proj | - | Projektion, die auf die Elemente angewendet werden soll |
Rückgabewert
Ein
tagged_pair
-Objekt, das die folgenden zwei Elemente enthält:
-
Das erste Element, mit dem Tag
tag::in, ist der Past-the-End-Iterator des Quellbereichs (also ein Iterator vom TypI, der gleich dem Sentinel last ist). -
Das zweite Element, mit dem Tag
tag::fun, wird vonstd::move(f)initialisiert (nach allen Anwendungen des Funktionsobjekts).
Komplexität
Genau last - first Anwendungen von f und proj .
Mögliche Implementierung
template<InputIterator I, Sentinel<I> S, class Proj = ranges::identity, IndirectUnaryInvocable<ranges::projected<I, Proj>> Fun> auto for_each(I first, S last, Fun f, Proj proj = Proj{}) -> ranges::tagged_pair<tag::in(I), tag::fun(Fun)> { for (; first != last; ++first) ranges::invoke(f, ranges::invoke(proj, *first)); return {std::move(first), std::move(f)}; } |
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
|
wendet eine Funktion auf einen Elementbereich an
(Funktionsschablone) |
|
Bereichs-
for
-Schleife
(C++11)
|
führt Schleife über Bereich aus |
|
wendet ein unäres
Funktionsobjekt
auf Elemente eines
Bereichs
an
(Funktionsschablone) |
|
|
(C++17)
|
wendet ein Funktionsobjekt auf die ersten N Elemente einer Sequenz an
(Funktionsschablone) |