std::ranges:: views:: zip_transform, std::ranges:: zip_transform_view
|
Definiert im Header
<ranges>
|
||
|
template
<
std::
move_constructible
F,
ranges::
input_range
...
Views
>
requires
(
ranges::
view
<
Views
>
&&
...
)
&&
(
sizeof...
(
Views
)
>
0
)
&&
|
(1) | (seit C++23) |
|
namespace
views
{
inline
constexpr
/*unspecified*/
zip_transform
=
/*unspecified*/
;
|
(2) | (seit C++23) |
|
Aufrufsignatur
|
||
|
template
<
class
F,
ranges::
viewable_range
...
Rs
>
requires
/* siehe unten */
|
(seit C++23) | |
zip_transform_view
ist ein Range-Adapter, der ein aufrufbares Objekt und eine oder mehrere
view
s
entgegennimmt und eine
view
erzeugt, deren
i
tes
Element das Ergebnis der Anwendung des aufrufbaren Objekts auf die
i
ten
Elemente aller Views ist.
Ein Typ
T
modelliert das ausschließlich für die Darstellung vorgesehene Konzept
/*can-reference*/
genau dann, wenn
T&
ein gültiger Typ ist.
views::zip_transform
ist ein Customization Point Object.
Beim Aufruf mit einem Argument
f
sei
FD
definiert als
std::
decay_t
<
decltype
(
f
)
>
, falls:
-
FDdas Konzeptcopy_constructiblemodelliert, -
FD
&
das Konzept
regular_invocablemodelliert, und - std:: invoke_result_t < FD & > ein Objekttyp ist,
dann ist
views
::
zip_transform
(
f
)
ausdrucksäquivalent
zu
(
(
void
)
f,
auto
(
views::
empty
<
std::
decay_t
<
std::
invoke_result_t
<
FD
&
>>>
)
)
. Andernfalls ist der Aufruf von
views::zip_transform
ill-formed.
zip_transform_view
modelliert die Konzepte
random_access_range
,
bidirectional_range
,
forward_range
,
input_range
,
common_range
und
sized_range
, wenn die zugrundeliegende
ranges::
zip_view
<
Views...
>
die jeweiligen Konzepte modelliert.
Inhaltsverzeichnis |
Customization Point Objects
Der Name
views::zip_transform
bezeichnet ein
Customization Point Object
, welches ein konstantes
Funktionsobjekt
eines
Literal
semiregular
Klassentyps ist. Siehe
CustomizationPointObject
für Details.
Memberfunktionen
Konstruiert einen
zip_transform_view
(Öffentliche Elementfunktion) |
|
|
Gibt einen Iterator zum Anfang zurück
(Öffentliche Elementfunktion) |
|
|
Gibt einen Iterator oder Sentinel zum Ende zurück
(Öffentliche Elementfunktion) |
|
Gibt die Anzahl der Elemente zurück, bereitgestellt nur wenn jeder zugrundeliegende (adaptierte) Bereich
sized_range
erfüllt
(Öffentliche Elementfunktion) |
|
Geerbt von std::ranges::view_interface |
|
Gibt zurück ob die abgeleitete Ansicht leer ist, bereitgestellt nur wenn sie
sized_range
oder
forward_range
erfüllt
(Öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
Gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(Öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
(C++23)
|
Gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(Öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
Gibt zurück ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur wenn
ranges::empty
darauf anwendbar ist
(Öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
Gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie
forward_range
erfüllt
(Öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
Gibt das letzte Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
bidirectional_range
und
common_range
erfüllt
(Öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
Gibt das
n
te
Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
random_access_range
erfüllt
(Öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
Ableitungsleitfäden
Mitgliedertypen
| Mitgliedertyp | Definition |
InnerView
(privat)
|
ranges::
zip_view
<
Views...
>
.
( Nur zur Darstellung verwendeter Mitgliedertyp* ) |
ziperator
(privat)
|
|
zentinel
(privat)
|
|
Datenmitglieder
| Mitgliedsobjekt | Definition |
zip_
(privat)
|
Ein zugrundeliegendes View-Objekt vom Typ
InnerView
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
fun_
(privat)
|
Ein gekapseltes aufrufbares Objekt vom Typ
movable-box
<F>
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
Geschachtelte Klassen
|
der Iteratortyp
( Nur zur Darstellung verwendete Member-Klassenvorlage* ) |
|
der Sentinel-Typ, verwendet wenn der zugrundeliegende
zip_view
kein
common_range
ist
( Nur zur Darstellung verwendete Member-Klassenvorlage* ) |
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_zip
|
202110L
|
(C++23) |
ranges::
zip_view
,
std::ranges::zip_transform_view
,
ranges:: adjacent_view , ranges:: adjacent_transform_view |
Beispiel
#include <array> #include <iostream> #include <list> #include <ranges> #include <vector> void print(auto const rem, auto const& r) { std::cout << rem << '{'; for (char o[]{0,' ',0}; auto const& e : r) std::cout << o << e, *o = ','; std::cout << "}\n"; } int main() { auto v1 = std::vector<float>{1, 2, 3}; auto v2 = std::list<short>{1, 2, 3, 4}; auto v3 = std::to_array({1, 2, 3, 4, 5}); auto add = [](auto a, auto b, auto c) { return a + b + c; }; auto sum = std::views::zip_transform(add, v1, v2, v3); print("v1: ", v1); print("v2: ", v2); print("v3: ", v3); print("sum: ", sum); }
Ausgabe:
v1: {1, 2, 3}
v2: {1, 2, 3, 4}
v3: {1, 2, 3, 4, 5}
sum: {3, 6, 9}
Siehe auch
|
(C++23)
|
eine
view
bestehend aus Tupeln von Referenzen auf entsprechende Elemente der adaptierten Views
(Klassentemplate) (Customization Point Object) |
eine
view
einer Sequenz, die eine Transformationsfunktion auf jedes Element anwendet
(Klassentemplate) (Range-Adapter-Objekt) |
|
nimmt eine
view
bestehend aus
tuple-like
Werten und eine Zahl N und erzeugt eine
view
des N
ten
Elements jedes Tupels
(Klassentemplate) (Range-Adapter-Objekt) |