transform_view
(Clase, Biblioteca estándar de C++)
Vista de elementos, cada uno de los cuales es una transformación de un elemento en el intervalo especificado.
Sintaxis
template<input_range V, move_constructible F>
requires view<V> && is_object_v<F> &&
regular_invocable<F&, range_reference_t<V>> &&
can-reference<invoke_result_t<F&, range_reference_t<V>>>
class transform_view : public view_interface<transform_view<V, F>>;
Parámetros de plantilla
F
Tipo del objeto de función que transforma los elementos.
V
Tipo de la vista subyacente.
Características de la vista
Para obtener una descripción de las siguientes entradas, vea View class characteristics (Ver características de clase).
Característica | Descripción |
---|---|
Adaptador de rango | views::transform |
Intervalo subyacente | Debe satisfacer input_range o superior |
Tipo de elemento | Igual que el tipo de valor devuelto de la función de transformación. |
Ver categoría de iterador | Admite input_range hasta random_access_range , dependiendo del intervalo subyacente. |
Tamaño | Solo si el intervalo subyacente cumple sized_range |
Es const -iterable |
Solo si el intervalo subyacente es const iterable y la transformación funciona en const referencias. |
Rango común | Solo si el intervalo subyacente cumple common_range |
Intervalo prestado | No |
Miembros
Funciones miembro | Descripción |
---|---|
ConstructoresC++20 | Construya la vista. |
base C++20 |
Obtenga el intervalo subyacente. |
begin C++20 |
Obtenga un iterador al primer elemento. |
end C++20 |
Obtenga el sentinel al final de la vista. |
size C++20 |
Obtiene el número de elementos. El intervalo subyacente debe satisfacer sized_range . |
Heredado de view_interface |
Descripción |
back C++20 |
Obtenga el último elemento. |
empty C++20 |
Compruebe si la vista está vacía. |
front C++20 |
Obtiene el primer elemento. |
operator bool C++20 |
Compruebe si la vista no está vacía. |
operator[] C++20 |
Obtiene el elemento que se encuentra en la posición especificada. |
Requisitos
Encabezado: <ranges>
(desde C++20)
Espacio de nombres: std::ranges
Opción del compilador: /std:c++20
o posterior es necesaria.
Constructores
Construcción de una instancia de transform_view
1) transform_view() requires default_initializable<V>
&& default_initializable<F> = default;
2) constexpr transform_view(V base, F func);
Parámetros
base
Vista subyacente.
func
Función que transforma cada elemento.
Para obtener información sobre los tipos de parámetros de plantilla, consulte Parámetros de plantilla.
Valor devuelto
Instancia de transform_view
.
Comentarios
La mejor manera de crear un transform_view
es usar el adaptador de views::transform
rango. Los adaptadores de rango son la manera prevista de crear clases de vista. Los tipos de vista se exponen en caso de que desee crear su propio tipo de vista personalizado.
1) Cree un valor inicializado transform_view
. La función de transformación y la vista subyacente deben ser inicializables de forma predeterminada.
2) Mueva la construcción transform_view
a partir de una base
vista y una función func
de transformación . Tanto como base
func
se mueven a través de std::move()
.
Ejemplo: transform_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
#include <chrono>
using namespace std;
using namespace chrono;
void print(auto v)
{
for (auto x : v)
{
cout << x << ' ';
}
cout << '\n';
}
struct classes
{
string className;
weekday startDay;
};
int main()
{
std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
// outputs 0 2 4 6 -8 10 12
print(v | std::views::transform([](int i) {return i * 2; }));
// ---- Modify the elements in the collection by returning a reference to the element to transform
std::vector<classes> theClasses = {
{"Math", Monday},
{"English", Wednesday},
{"History", Monday},
{"Science", Wednesday},
{"Art", Friday},
{"Music", Thursday}
};
// lambda to get a reference to the day of the week for a class
auto getDay = [](classes& c) -> weekday&
{
return c.startDay;
};
// If a class starts on Monday, change it to Tuesday
for (auto&& startDay : theClasses | std::views::transform(getDay))
{
// modify the startDay in the collection
if (startDay == Monday)
{
startDay = Tuesday;
}
}
// output classes and start times
for (auto c : theClasses)
{
std::cout << c.className << " : " << c.startDay << '\n';
}
}
0 2 4 6 -8 10 12
Math : Tue
English : Wed
History : Tue
Science : Wed
Art : Fri
Music : Thu
base
Obtenga la vista subyacente.
// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;
// Uses std::move() to return the underlying view
constexpr V base() &&;
Parámetros
Ninguno.
Devoluciones
Vista subyacente.
begin
Obtenga un iterador al primer elemento de la vista.
constexpr auto begin();
Valor devuelto
Iterador que apunta al primer elemento de la vista. El comportamiento no está definido si la vista no tiene un predicado.
end
Obtenga el sentinel al final de la vista.
constexpr auto end()
Valor devuelto
Sentinel que sigue al último elemento de la vista:
size
Obtiene el número de elementos de la vista.
constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;
Parámetros
Ninguno.
Valor devuelto
Número de elementos de la vista.