РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
373 of 815 menu

Функция transform

Функция transform применяет заданную операцию к каждому элементу исходного диапазона и записывает результат в целевой диапазон. В первом параметре мы передаем итератор начала исходного диапазона, во втором - итератор конца исходного диапазона, в третьем - итератор начала целевого диапазона, а в четвертом - функцию или функциональный объект, который выполняет преобразование.

Существует две формы функции: унарная, которая принимает один аргумент, и бинарная, которая принимает два аргумента из двух разных диапазонов. Функция возвращает итератор, указывающий на элемент, следующий за последним преобразованным элементом в целевом диапазоне.

Синтаксис

// унарная операция transform(first1, last1, result, unary_op); // бинарная операция transform(first1, last1, first2, result, binary_op);

Пример

Давайте умножим каждый элемент вектора на 2 с помощью лямбда-функции:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> src = {1, 2, 3, 4, 5}; vector<int> res(src.size()); transform(src.begin(), src.end(), res.begin(), [](int x) { return x * 2; }); for (int x : res) { cout << x << " "; } cout << endl; return 0; }

Результат выполнения кода:

2 4 6 8 10

Пример

Давайте преобразуем строку в верхний регистр с помощью функции toupper:

#include <iostream> #include <string> #include <algorithm> #include <cctype> using namespace std; int main() { string src = "abcde"; string res = src; transform(src.begin(), src.end(), res.begin(), [](unsigned char c) { return toupper(c); }); cout << res << endl; return 0; }

Результат выполнения кода:

"ABCDE"

Пример

Давайте сложим элементы двух векторов попарно с помощью бинарной формы функции:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> a = {1, 2, 3, 4, 5}; vector<int> b = {10, 20, 30, 40, 50}; vector<int> res(a.size()); transform(a.begin(), a.end(), b.begin(), res.begin(), [](int x, int y) { return x + y; }); for (int x : res) { cout << x << " "; } cout << endl; return 0; }

Результат выполнения кода:

11 22 33 44 55

Пример

Давайте заменим каждый элемент вектора на противоположный по знаку, используя стандартную функцию negate:

#include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; int main() { vector<int> src = {1, 2, 3, 4, 5}; vector<int> res(src.size()); transform(src.begin(), src.end(), res.begin(), negate<int>()); for (int x : res) { cout << x << " "; } cout << endl; return 0; }

Результат выполнения кода:

-1 -2 -3 -4 -5

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

  • функция copy,
    которая копирует элементы из одного диапазона в другой
  • функция for_each,
    которая применяет функцию к каждому элементу диапазона
  • функция replace,
    которая заменяет элементы с определенным значением
  • функция accumulate,
    которая вычисляет сумму элементов диапазона
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить