Namespaces
Variants

std::ranges:: views:: transform, std::ranges:: transform_view

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <ranges>
(1)
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 >>
(начиная с 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_ (приватный) базовое представление
( объект-член только для демонстрации* )
copyable-box <F> (до C++23) movable-box <F> (с C++23) fun_ (приватный) базовый функциональный объект
( объект-член только для демонстрации* )

Функции-члены

создаёт transform_view
(публичная функция-член)
возвращает копию базового (адаптированного) представления
(публичная функция-член)
возвращает итератор на начало
(публичная функция-член)
возвращает итератор или страж на конец
(публичная функция-член)
возвращает количество элементов, предоставляется только если базовый (адаптированный) диапазон удовлетворяет sized_range
(публичная функция-член)
возвращает приблизительный размер результирующего approximately_sized_range
(публичная функция-член)
Наследуется от std::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{"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);
}

Вывод:

cppreference.net
pccersrerapr.pbz
pccersrerapr.pbz
cppreference.net

Смотрите также

применяет функцию к диапазону элементов
(объект-функция алгоритма)