std::ranges::views::transform, std::ranges::transform_view
Источник: ru.cppreference.net
| Определён в заголовке <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_ (приватный)
|
базовое представление (underlying view) (объект-элемент, показанный только для пояснения*) | ||||
fun_ (приватный)
|
базовый объект функции (объект-элемент, показанный только для пояснения*) |
Функции-члены
создаёт
transform_view
(публичная функция-член) |
|
|
возвращает копию базового (адаптированного) представления
(публичная функция-член) |
|
|
возвращает итератор на начало
(публичная функция-член) |
|
|
возвращает итератор или страж на конец
(публичная функция-член) |
|
возвращает количество элементов, предоставляется только если базовый (адаптированный) диапазон удовлетворяет
sized_range
(публичная функция-член) |
|
|
(C++26)
|
возвращает приблизительный размер результирующего
approximately_sized_range
(публичная функция-член) |
Наследуется от ranges::view_interface | |
| возвращает, является ли производное представление пустым, предоставляется только если оно удовлетворяет требованиям sized_range или forward_range (открытый элемент функции std::ranges::view_interface<D>)
| |
(C++23) |
возвращает константный итератор к началу диапазона (открытый элемент функции std::ranges::view_interface<D>)
|
(C++23) |
возвращает сигнальный элемент для константного итератора диапазона (открытый элемент функции 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>)
| |
Руководства по выводу
Вложенные классы
|
тип итератора
( демонстрационный шаблон класса-члена* ) |
|
|
тип сторожа
( демонстрационный шаблон класса-члена* ) |
Пример
Запустить этот код
#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{"ru.cppreference.net\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); }
Вывод:
ru.cppreference.net pccersrerapr.pbz pccersrerapr.pbz ru.cppreference.net
Смотрите также
|
(C++20)
|
применяет функцию к диапазону элементов
(объект-функция алгоритма) |