Функция views::transform
Функция views::transform создает представление,
которое применяет заданную функцию к каждому элементу
исходного диапазона. Сами элементы при этом не изменяются -
преобразование выполняется лениво, по мере обращения
к элементам представления. В первый параметр мы передаем
исходный диапазон, а во второй - функцию (или функциональный
объект), которая будет применена к каждому элементу.
Функция возвращает новое представление, элементы которого являются результатами применения переданной функции к элементам исходного диапазона.
Синтаксис
std::views::transform(range, func)
Также доступна форма с pipe-оператором:
range | std::views::transform(func)
Пример
Давайте умножим каждый элемент вектора
{1, 2, 3, 4, 5} на 2:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
for (int x : vec | views::transform([](int n) { return n * 2; }))
{
cout << x << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
2 4 6 8 10
Пример
Давайте преобразуем каждое число вектора в строку
с префиксом "n":
#include <iostream>
#include <vector>
#include <string>
#include <ranges>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
for (string s : vec | views::transform([](int n) { return "n" + to_string(n); }))
{
cout << s << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
"n1" "n2" "n3" "n4" "n5"
Пример
Давайте применим функцию views::transform
к строке "abcde", преобразовав каждый символ
в верхний регистр:
#include <iostream>
#include <string>
#include <cctype>
#include <ranges>
using namespace std;
int main()
{
string str = "abcde";
for (char c : str | views::transform([](char c) { return (char)toupper(c); }))
{
cout << c;
}
cout << endl;
return 0;
}
Результат выполнения кода:
"ABCDE"
Смотрите также
-
функция
views::filter,
которая отбирает элементы диапазона по условию -
функция
views::take,
которая берет первые N элементов диапазона -
функция
views::drop,
которая пропускает первые N элементов диапазона -
функция
ranges::for_each,
которая применяет функцию к каждому элементу диапазона