Функция partial_sum
Функция partial_sum из заголовочного файла numeric вычисляет
последовательные частичные суммы элементов диапазона. Первым параметром
функция принимает итератор начала исходного диапазона, вторым - итератор
конца исходного диапазона, а третьим - итератор начала диапазона, куда
будет записан результат. По умолчанию элементы складываются оператором
+, но можно передать четвёртым параметром свою функцию для
выполнения произвольной операции.
Функция возвращает итератор, указывающий на элемент, следующий за последним записанным элементом результирующего диапазона.
Синтаксис
partial_sum(first, last, d_first);
partial_sum(first, last, d_first, binary_op);
Пример
Давайте вычислим частичные суммы вектора {1, 2, 3, 4, 5}
и выведем результат:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> src = {1, 2, 3, 4, 5};
vector<int> res(src.size());
partial_sum(src.begin(), src.end(), res.begin());
for (int x : res) {
cout << x << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 3 6 10 15
Пример
Давайте вычислим частичные произведения вектора {1, 2, 3, 4, 5},
передав в качестве четвёртого параметра функцию multiplies:
#include <iostream>
#include <vector>
#include <numeric>
#include <functional>
using namespace std;
int main()
{
vector<int> src = {1, 2, 3, 4, 5};
vector<int> res(src.size());
partial_sum(src.begin(), src.end(), res.begin(), multiplies<int>());
for (int x : res) {
cout << x << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 6 24 120
Пример
Давайте вычислим частичные суммы вектора {1, 2, 3, 4, 5},
записав результат прямо на место исходных элементов:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main()
{
vector<int> res = {1, 2, 3, 4, 5};
partial_sum(res.begin(), res.end(), res.begin());
for (int x : res) {
cout << x << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 3 6 10 15
Смотрите также
-
функция
accumulate,
которая вычисляет сумму всех элементов диапазона -
функция
reduce,
которая сворачивает диапазон в одно значение -
функция
inner_product,
которая вычисляет скалярное произведение двух диапазонов -
функция
transform,
которая применяет функцию к каждому элементу диапазона