Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Definido en el encabezado <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) (desde C++23)
namespace views {

inline constexpr /*unspecified*/ zip_transform = /*unspecified*/ ;

}
(2) (desde C++23)
Firma de llamada
template < class F, ranges:: viewable_range ... Rs >

requires /* ver más abajo */

constexpr auto zip_transform ( F && f, Rs && ... rs ) ;
(desde C++23)
1) zip_transform_view es un adaptador de rango que toma un objeto invocable y una o más view s , y produce una view cuyo i th elemento es el resultado de aplicar el objeto invocable a los i th elementos de todas las views.
Un tipo T modela el concepto de solo exposición /*can-reference*/ si y solo si T& es un tipo válido.
2) views::zip_transform es un objeto de punto de personalización.

Al llamar con un argumento f , sea FD igual a std:: decay_t < decltype ( f ) > , si:

entonces views :: zip_transform ( f ) es equivalente-expresión a ( ( void ) f, auto ( views:: empty < std:: decay_t < std:: invoke_result_t < FD & >>> ) ) . De lo contrario, la llamada a views::zip_transform está mal formada.

Al llamar con más de un argumento f y rs... , views :: zip_transform ( f, rs... ) es equivalente-expresión a ranges :: zip_transform_view ( f, rs... ) .

zip_transform_view modela los conceptos random_access_range , bidirectional_range , forward_range , input_range , common_range , y sized_range cuando el ranges:: zip_view < Views... > subyacente modela los conceptos respectivos.

Contenidos

Objetos de punto de personalización

El nombre views::zip_transform denota un objeto de punto de personalización , que es un objeto función constante de tipo clase literal semiregular . Consulte CustomizationPointObject para más detalles.

Funciones miembro

construye un zip_transform_view
(función miembro pública)
devuelve un iterador al inicio
(función miembro pública)
devuelve un iterador o centinela al final
(función miembro pública)
devuelve el número de elementos, proporcionado solo si cada rango subyacente (adaptado) satisface sized_range
(función miembro pública)
Heredado de std::ranges::view_interface
devuelve si la vista derivada está vacía, proporcionado solo si satisface sized_range o forward_range
(función miembro pública de std::ranges::view_interface<D> )
(C++23)
devuelve un iterador constante al inicio del rango
(función miembro pública de std::ranges::view_interface<D> )
(C++23)
devuelve un centinela para el iterador constante del rango
(función miembro pública de std::ranges::view_interface<D> )
devuelve si la vista derivada no está vacía, proporcionado solo si ranges::empty es aplicable a ella
(función miembro pública de std::ranges::view_interface<D> )
devuelve el primer elemento en la vista derivada, proporcionado si satisface forward_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el último elemento en la vista derivada, proporcionado solo si satisface bidirectional_range y common_range
(función miembro pública de std::ranges::view_interface<D> )
devuelve el n ésimo elemento en la vista derivada, proporcionado solo si satisface random_access_range
(función miembro pública de std::ranges::view_interface<D> )

Guías de deducción

Tipos de miembros

Tipo de miembro Definición
InnerView (privado) ranges:: zip_view < Views... > .
( tipo de miembro solo para exposición* )
ziperator (privado)
zentinel (privado)

Miembros de datos

Objeto miembro Definición
zip_ (privado) Un objeto vista subyacente de tipo InnerView
( objeto miembro solo para exposición* )
fun_ (privado) Un objeto invocable encapsulado de tipo movable-box <F>
( objeto miembro solo para exposición* )

Clases anidadas

el tipo de iterador
( clase de miembro plantilla solo para exposición* )
el tipo de centinela utilizado cuando el zip_view subyacente no es un common_range
( clase de miembro plantilla solo para exposición* )

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_ranges_zip 202110L (C++23) ranges:: zip_view ,
std::ranges::zip_transform_view ,
ranges:: adjacent_view ,
ranges:: adjacent_transform_view

Ejemplo

#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);
}

Salida:

v1:  {1, 2, 3}
v2:  {1, 2, 3, 4}
v3:  {1, 2, 3, 4, 5}
sum: {3, 6, 9}

Véase también

una view que consiste en tuplas de referencias a elementos correspondientes de las vistas adaptadas
(plantilla de clase) (objeto de punto de personalización)
una view de una secuencia que aplica una función de transformación a cada elemento
(plantilla de clase) (objeto adaptador de rango)
toma una view que consiste en valores tuple-like y un número N y produce una view del elemento N ésimo de cada tupla
(plantilla de clase) (objeto adaptador de rango)