std::ranges::views::transform, std::ranges::transform_view
Определено в заголовочном файле <ranges> | ||
|---|---|---|
template< ranges::input_range V,
std::copy_constructible F >
requires ranges::view<V> &&
std::is_object_v<F> &&
std::regular_invocable<F&, ranges::range_reference_t<V>> &&
/* invoke_result_t<F&, range_reference_t<V>>& is a valid type */
class transform_view
: public ranges::view_interface<transform_view<V, F>>
| (1) |
(начиная с C++20) (до C++23) |
template< ranges::input_range V,
std::move_constructible F >
requires ranges::view<V> &&
std::is_object_v<F> &&
std::regular_invocable<F&, ranges::range_reference_t<V>> &&
/* invoke_result_t<F&, range_reference_t<V>>& is a valid type */
class transform_view
: public ranges::view_interface<transform_view<V, F>>
| (начиная с C++23) | |
namespace views {
inline constexpr /*unspecified*/ transform = /*unspecified*/;
}
| (2) | (начиная с C++20) |
| Сигнатура вызова | ||
template< ranges::viewable_range R, class F >
requires /* see below */
constexpr ranges::view auto transform( R&& r, F&& fun );
| (начиная с C++20) | |
template< class F > constexpr /*range adaptor closure*/ transform( F&& fun ); | (начиная с C++20) |
1) Адаптер диапазона, представляющий
view базовой последовательности после применения функции преобразования к каждому элементу.
2) RangeAdaptorObject. Выражение
views::transform(e, f) эквивалентно выражению transform_view(e, f) для любых подходящих подвыражений e и f.transform_view моделирует концепции random_access_range, bidirectional_range, forward_range, input_range, common_range и sized_range, если базовое представление V моделирует соответствующие концепции.
Поля данных
| Элемент | Описание | ||||
|---|---|---|---|---|---|
V base_ (закрытый) | базовое представление (объект-член, используемый только для экспозиции*) |
||||
fun_ (закрытый) | базовый функциональный объект (объект-член, используемый только для экспозиции*) |
Функции-члены
создаёт transform_view (открытая функция-член) |
|
| возвращает копию базового (адаптированного) представления (открытая функция-член) |
|
| возвращает итератор на начало (открытая функция-член) |
|
| возвращает итератор или sentinel конца (открытая функция-член) |
|
возвращает количество элементов; предоставляется только если базовый (адаптированный) диапазон удовлетворяет концепции sized_range (открытая функция-член) |
|
|
(C++26) | возвращает приблизительный размер результирующего диапазона approximately_sized_range (открытая функция-член) |
Унаследовано от |
|
возвращает признак того, что производное представление пусто; предоставляется только если оно удовлетворяет концепции sized_range или forward_range (открытая функция-член std::ranges::view_interface<D>) |
|
|
(C++23) | возвращает константный итератор на начало диапазона (открытая функция-член std::ranges::view_interface<D>) |
|
(C++23) | возвращает sentinel для константного итератора диапазона (открытая функция-член std::ranges::view_interface<D>) |
возвращает признак того, что производное представление не пусто; предоставляется только если к нему применима концепция ranges::empty (открытая функция-член std::ranges::view_interface<D>) |
|
возвращает первый элемент производного представления; предоставляется, если оно удовлетворяет концепции forward_range (открытая функция-член std::ranges::view_interface<D>) |
|
возвращает последний элемент производного представления; предоставляется только если оно удовлетворяет концепциям bidirectional_range и common_range (открытая функция-член std::ranges::view_interface<D>) |
|
возвращает элемент производного представления с индексом n-й; предоставляется только если оно удовлетворяет концепции random_access_range (открытая функция-член std::ranges::view_interface<D>) |
|
Направляющие вывода типов
Вложенные классы
| тип итератора (шаблон класса-члена, используемый только для экспозиции*) |
|
| тип sentinel (шаблон класса-члена, используемый только для экспозиции*) |
Пример
#include <algorithm>
#include <cstdio>
#include <iterator>
#include <ranges>
#include <string>
char rot13a(const char x, const char a)
{
return a + (x - a + 13) % 26;
}
char rot13(const char x)
{
if ('Z' >= x and x >= 'A')
return rot13a(x, 'A');
if ('z' >= x and x >= 'a')
return rot13a(x, 'a');
return x;
}
int main()
{
auto show = [](const unsigned char x) { std::putchar(x); };
std::string in{"cppreference.com\n"};
std::ranges::for_each(in, show);
std::ranges::for_each(in | std::views::transform(rot13), show);
std::string out;
std::ranges::copy(std::views::transform(in, rot13), std::back_inserter(out));
std::ranges::for_each(out, show);
std::ranges::for_each(out | std::views::transform(rot13), show);
}
Вывод:
cppreference.com pccersrerapr.pbz pccersrerapr.pbz cppreference.com
См. также
|
(C++20) | применяет функцию к диапазону элементов (функциональный объект-алгоритм) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/transform_view