Работа с диапазонами чисел

Для работы с диапазонами, состоящими из числовых значений, предназначены следующие функции:

  • accumulate() — возвращает результат накопления всех значений из диапазона между first и last. По умолчанию вычисляет сумму всех значений из диапазона, но в параметре binary_op можно указать пользовательскую функцию вычисления. В параметре init указывается начальное значение. Формат функции:
#include <numeric>
_Tp accumulate(first, last, _Tp init[, binary_op]);

Пример:

std::vector<int> arr = {1, 2, 3};
int init = 0;
int result = std::accumulate(arr.begin(), arr.end(), init);
std::cout << result << std::endl; // 6
  • partial_sum() — вычисляет частичную сумму элементов из диапазона между first и last и записывает результаты в диапазон, начинающийся с позиции, на которую указывает итератор result. Функция возвращает итератор, указывающий на позицию после последнего элемента в диапазоне результата. В параметре binary_op можно указать пользовательскую функцию вычисления. Формат функции:
#include <numeric>
iterator partial_sum(first, last, result[, binary_op]);

Пример:

std::vector<int> arr = {1, 2, 3}, res(3, -1);
std::partial_sum(arr.begin(), arr.end(), res.begin());
for (int &el : res) std::cout << el << ' ';
std::cout << std::endl;            // 1 3 6
/*
res[0] = arr[0];                   // 1
res[1] = arr[0] + arr[1];          // 3
res[2] = arr[0] + arr[1] + arr[2]; // 6
*/
  • adjacent_difference() — вычисляет разницу соседних элементов из диапазона между first и last и записывает результаты в диапазон, начинающийся с позиции, на которую указывает итератор result. Функция возвращает итератор, указывающий на позицию после последнего элемента в диапазоне результата. В параметре binary_op можно указать пользовательскую функцию вычисления. Формат функции:
#include <numeric>
iterator adjacent_difference(first, last, result[, binary_op]);

Пример:

std::vector<int> arr = {1, 2, 4, 8}, res(4, -1);
std::adjacent_difference(arr.begin(), arr.end(), res.begin());
for (int &el : res) std::cout << el << ' ';
std::cout << std::endl;            // 1 1 2 4
/*
res[0] = arr[0];                   // 1
res[1] = arr[1] - arr[0];          // 1
res[2] = arr[2] - arr[1];          // 2
res[3] = arr[3] - arr[2];          // 4
*/
  • inner_product() — перемножает пары соответствующих элементов из двух диапазонов и возвращает результат накопления всех результатов операций. Первый диапазон задается с помощью итераторов first1 и last1, а второй диапазон начинается с позиции, на которую указывает итератор first2. По умолчанию функция binary_op2 вычисляет произведение двух соответствующих по позиции элементов из разных диапазонов, а функция binary_op1 — суммирует предыдущий промежуточный результат с результатом произведения. В параметре init указывается начальное значение. Формат функции:
#include <numeric>
_Tp inner_product(first1, last1, first2, _Tp init[,
                  binary_op1, binary_op2]);

Пример:

std::vector<int> arr1 = {1, 2, 3}, arr2 = {4, 5, 6};
int init = 0;
int res = std::inner_product(arr1.begin(), arr1.end(),
                             arr2.begin(), init);
std::cout << res << std::endl; // 32
/*
res = init;                    // 0
res += (arr1[0] * arr2[0]);    // 4
res += (arr1[1] * arr2[1]);    // 14
res += (arr1[2] * arr2[2]);    // 32
*/
  • iota() — заполняет числовыми значениями диапазон между first и last. Каждое последующее значение будет на единицу больше предыдущего. Начальное значение указывается в параметре val. Формат функции:
#include <numeric>
void iota(first, last, _Tp val);

Пример:

std::vector<int> arr(5, -1);
std::iota(arr.begin(), arr.end(), 1);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 2 3 4 5

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов