std::ranges:: views:: zip_transform, std::ranges:: zip_transform_view
|
Definido en el encabezado
<ranges>
|
||
|
template
<
std::
move_constructible
F,
ranges::
input_range
...
Views
>
requires
(
ranges::
view
<
Views
>
&&
...
)
&&
(
sizeof...
(
Views
)
>
0
)
&&
|
(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 */
|
(desde C++23) | |
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.
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:
-
FDmodelacopy_constructible, -
FD
&
modela
regular_invocable, y - std:: invoke_result_t < FD & > es un tipo objeto,
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.
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
|
(C++23)
|
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) |