std::ranges:: views:: zip, std::ranges:: zip_view
|
Definiert im Header
<ranges>
|
||
|
template
<
ranges::
input_range
...
Views
>
requires
(
ranges::
view
<
Views
>
&&
...
)
&&
(
sizeof...
(
Views
)
>
0
)
|
(1) | (seit C++23) |
|
namespace
views
{
inline
constexpr
/*unspezifiziert*/
zip
=
/*unspezifiziert*/
;
|
(2) | (seit C++23) |
|
Aufrufsignatur
|
||
|
template
<
ranges::
viewable_range
...
Rs
>
requires
/* siehe unten */
|
(seit C++23) | |
zip_view
ist ein Range-Adapter, der eine oder mehrere
view
s
entgegennimmt und eine
view
erzeugt, deren
i
-tes Element ein tupelartiger Wert ist, der aus den
i
ten
Elementen aller Views besteht. Die Größe der erzeugten View ist das Minimum der Größen aller adaptierten Views.
views::zip
ist ein Customization Point Object.
Wenn es ohne Argument aufgerufen wird,
views
::
zip
(
)
ist
ausdrucksäquivalent
zu
auto
(
views::
empty
<
std::
tuple
<>>
)
.
zip_view
modelliert stets
input_range
und modelliert
forward_range
,
bidirectional_range
,
random_access_range
oder
sized_range
, wenn alle adaptierten
view
-Typen das entsprechende Konzept modellieren.
zip_view
modelliert
common_range
wenn
-
sizeof...
(
Views
)
ist gleich
1
, und der einzige adaptierte View-Typ modelliert
common_range, oder -
mindestens ein adaptierter View-Typ modelliert nicht
bidirectional_range, und jeder adaptierte View-Typ modelliertcommon_range, oder -
jeder adaptierte View-Typ modelliert sowohl
random_access_rangeals auchsized_range.
Inhaltsverzeichnis |
Customization Point Objects
Der Name
views::zip
bezeichnet ein
Customization Point Object
, welches ein konstantes
Funktionsobjekt
eines
Literal
semiregular
-Klassentyps ist. Weitere Details finden Sie unter
CustomizationPointObject
.
Datenmitglieder
| Mitglied | Beschreibung |
std::
tuple
<
Views...
>
views_
|
Alle angepassten View-Objekte
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
Memberfunktionen
Konstruiert einen
zip_view
(Öffentliche Mitgliedsfunktion) |
|
|
Gibt einen Iterator zum Anfang zurück
(Öffentliche Mitgliedsfunktion) |
|
|
Gibt einen Iterator oder Sentinel zum Ende zurück
(Öffentliche Mitgliedsfunktion) |
|
Gibt die Anzahl der Elemente zurück, bereitgestellt nur wenn jeder zugrundeliegende (adaptierte) Bereich
sized_range
erfüllt
(Öffentliche Mitgliedsfunktion) |
|
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 Mitgliedsfunktion von
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
Gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(Öffentliche Mitgliedsfunktion von
std::ranges::view_interface<D>
)
|
|
(C++23)
|
Gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(Öffentliche Mitgliedsfunktion 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 Mitgliedsfunktion von
std::ranges::view_interface<D>
)
|
|
Gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie
forward_range
erfüllt
(Öffentliche Mitgliedsfunktion 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 Mitgliedsfunktion 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 Mitgliedsfunktion von
std::ranges::view_interface<D>
)
|
|
Ableitungsleitfäden
Geschachtelte Klassen
|
der Iteratortyp
( Nur zur Darstellung dienende Member-Klassenvorlage* ) |
|
der Sentinel-Typ, verwendet wenn
zip_view
kein
common_range
ist
( Nur zur Darstellung dienende Member-Klassenvorlage* ) |
Hilfsvorlagen
|
template
<
class
...
Views
>
constexpr
bool
enable_borrowed_range
<
ranges
::
zip_view
<
Views...
>>
=
|
(seit C++23) | |
Diese Spezialisierung von
ranges::enable_borrowed_range
bewirkt, dass
zip_view
das Konzept
borrowed_range
erfüllt, wenn jede zugrundeliegende View es erfüllt.
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_zip
|
202110L
|
(C++23) |
ranges::zip_view
,
ranges:: zip_transform_view , ranges:: adjacent_view , ranges:: adjacent_transform_view |
Beispiel
#include <array> #include <iostream> #include <list> #include <ranges> #include <string> #include <tuple> #include <vector> void print(auto const rem, auto const& range) { for (std::cout << rem; auto const& elem : range) std::cout << elem << ' '; std::cout << '\n'; } int main() { auto x = std::vector{1, 2, 3, 4}; auto y = std::list<std::string>{"α", "β", "γ", "δ", "ε"}; auto z = std::array{'A', 'B', 'C', 'D', 'E', 'F'}; print("Quellansichten:", ""); print("x: ", x); print("y: ", y); print("z: ", z); print("\nzip(x,y,z):", ""); for (std::tuple<int&, std::string&, char&> elem : std::views::zip(x, y, z)) { std::cout << std::get<0>(elem) << ' ' << std::get<1>(elem) << ' ' << std::get<2>(elem) << '\n'; std::get<char&>(elem) += ('a' - 'A'); // modifiziert das Element von z } print("\nNach Modifikation, z: ", z); }
Ausgabe:
Quellansichten: x: 1 2 3 4 y: α β γ δ ε z: A B C D E F zip(x,y,z): 1 α A 2 β B 3 γ C 4 δ D Nach Modifikation, z: a b c d E F
Siehe auch
eine
view
bestehend aus Ergebnissen der Anwendung einer Transformationsfunktion auf entsprechende Elemente der adaptierten Views
(Klassentemplate) (Customization Point Object) |
|
nimmt eine
view
bestehend aus
tuple-like
Werten und eine Zahl N und erzeugt eine
view
des N
ten
Elements jedes Tupels
(Klassentemplate) (Range-Adaptor-Objekt) |