Classe transform_view
(Biblioteca Padrão C++)
Uma exibição de elementos, cada um dos quais é uma transformação de um elemento no intervalo especificado.
Sintaxe
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 modelo
F
O tipo do objeto de função que transforma os elementos.
V
O tipo da exibição subjacente.
Ver características
Para obter uma descrição das entradas a seguir, consulte Exibir características da classe
Característica | Descrição |
---|---|
Adaptador de gama | views::transform |
Intervalo subjacente | Deve satisfazer input_range ou superior |
Tipo de elemento | O mesmo que o tipo de retorno da função de transformação. |
Exibir categoria do iterador | Suporta input_range até random_access_range , dependendo do intervalo subjacente |
Tamanho | Somente se o intervalo subjacente satisfizer sized_range |
É const -iterável |
Somente se o intervalo subjacente for const iterável e a transformação funcionar em const referências. |
Faixa comum | Somente se o intervalo subjacente satisfizer common_range |
Alcance emprestado | Não |
Membros
Funções de membro | Descrição |
---|---|
ConstrutoresC++20 | Construa a exibição. |
base C++20 |
Obtenha o intervalo subjacente. |
begin C++20 |
Obtenha um iterador para o primeiro elemento. |
end C++20 |
Pegue a sentinela no final da vista. |
size C++20 |
Obtenha o número de elementos. O intervalo subjacente deve satisfazer sized_range . |
Herdado de view_interface |
Descrição |
back C++20 |
Obtenha o último elemento. |
empty C++20 |
Teste se a exibição está vazia. |
front C++20 |
Obtenha o primeiro elemento. |
operator bool C++20 |
Teste se a exibição não está vazia. |
operator[] C++20 |
Obter o elemento na posição especificada. |
Requisitos
Cabeçalho: <ranges>
(desde C++20)
Namespace: std::ranges
Opção do compilador: /std:c++20
ou posterior é necessária.
Construtores
Construir uma instância de um transform_view
1) transform_view() requires default_initializable<V>
&& default_initializable<F> = default;
2) constexpr transform_view(V base, F func);
Parâmetros
base
A visão subjacente.
func
A função que transforma cada elemento.
Para obter informações sobre tipos de parâmetro de modelo, consulte Parâmetros de modelo.
Valor retornado
Uma instância de transform_view
.
Comentários
A melhor maneira de criar um transform_view
é usando o adaptador de views::transform
intervalo. Os adaptadores de intervalo são a maneira pretendida de criar classes de exibição. Os tipos de exibição são expostos caso você queira criar seu próprio tipo de exibição personalizado.
1) Crie um arquivo transform_view
. A função de transformação e a exibição subjacente devem ser inicializáveis por padrão.
2) Mova a transform_view
construção de uma base
visão e uma função func
de transformação. Ambos base
e func
são movidos via std::move()
.
Exemplo: 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
Obtenha a visão subjacente.
// 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
Nenhum.
Devoluções
A visão subjacente.
begin
Obtenha um iterador para o primeiro elemento na exibição.
constexpr auto begin();
Valor retornado
Um iterador apontando para o primeiro elemento na exibição. O comportamento será indefinido se a exibição não tiver um predicado.
end
Pegue a sentinela no final da vista.
constexpr auto end()
Valor retornado
A sentinela que segue o último elemento na exibição:
size
Obtenha o número de elementos na exibição.
constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;
Parâmetros
Nenhum.
Valor retornado
O número de elementos na exibição.