std::ranges::views::zip, std::ranges::zip_view
| Definiert in Header <ranges>
|
||
template< ranges::input_range... Views >
requires (ranges::view<Views> && ...) && (sizeof...(Views) > 0)
class zip_view
: public ranges::view_interface<zip_view<Views...>>
|
(1) | (seit C++23) |
namespace views {
inline constexpr /*unspecified*/ zip = /*unspecified*/;
}
|
(2) | (seit C++23) |
| Aufrufsignatur |
||
template< ranges::viewable_range... Rs >
requires /* see below */
constexpr ranges::view auto zip( Rs&&... rs );
|
(seit C++23) | |
zip_view ist ein Range-Adaptor, der einen oder mehrere views nimmt und einen view erzeugt, dessen ites Element ein tupelartiger Wert ist, der aus dem iten Element aller Views besteht. Die Größe des erzeugten Views ist das Minimum der Größen aller angepassten Views.views::zip ist ein Anpassungspunktobjekt.Beim Aufruf ohne Argument ist views::zip() ausdrucksäquivalent zu auto(views::empty<std::tuple<>>).
Andernfalls ist views::zip(rs...) ausdrucksäquivalent zu ranges::zip_view<views::all_t<decltype((rs))>...>(rs...).
zip_view modelliert immer input_range und modelliert forward_range, bidirectional_range, random_access_range oder sized_range, wenn alle angepassten view-Typen das entsprechende Konzept modellieren.
zip_view modelliert common_range, wenn
sizeof...(Views)gleich1ist und der einzige angepasste View-Typ common_range modelliert, oder- mindestens ein angepasster View-Typ modelliert kein bidirectional_range und jeder angepasste View-Typ modelliert common_range, oder
- jeder angepasste View-Typ modelliert sowohl random_access_range als auch sized_range.
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 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 nte 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
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) |