Namespaces
Variants

std::ranges:: views:: zip, std::ranges:: zip_view

From cppreference.net
Ranges library
Range adaptors
Definiert im 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 /*unspezifiziert*/ zip = /*unspezifiziert*/ ;

}
(2) (seit C++23)
Aufrufsignatur
template < ranges:: viewable_range ... Rs >

requires /* siehe unten */

constexpr ranges:: view auto zip ( Rs && ... rs ) ;
(seit C++23)
1) 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.
2) views::zip ist ein Customization Point Object.

Wenn es ohne Argument aufgerufen wird, views :: zip ( ) ist 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 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

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... >> =

( ranges:: enable_borrowed_range < 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)