Namespaces
Variants

std::ranges:: views:: zip_transform, std::ranges:: zip_transform_view

From cppreference.net
Ranges library
Range adaptors
Definiert im Header <ranges>
template < std:: move_constructible F, ranges:: input_range ... Views >

requires ( ranges:: view < Views > && ... ) && ( sizeof... ( Views ) > 0 ) &&
std:: is_object_v < F > && std:: regular_invocable <
F & , ranges:: range_reference_t < Views > ... > &&
/*can-reference*/ < std:: invoke_result_t <
F & , ranges:: range_reference_t < Views > ... >>
class zip_transform_view

: public ranges:: view_interface < zip_transform_view < F, Views... >>
(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 */

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

Beim Aufruf mit einem Argument f sei FD definiert als std:: decay_t < decltype ( f ) > , falls:

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.

Beim Aufruf mit mehr als einem Argument f und rs... ist views :: zip_transform ( f, rs... ) ausdrucksäquivalent zu ranges :: zip_transform_view ( f, rs... ) .

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

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)