Алгоритм partial_sum()
template < class InputIterator, class OutputIterator >
OutputIterator
partial_sum(
InputIterator first, InputIterator last,
OutputIterator result );
template < class InputIterator, class OutputIterator,
class BinaryOperation >
OutputIterator
partial_sum(
InputIterator first, InputIterator last,
OutputIterator result, BinaryOperation op );
Первый вариант partial_sum() создает из последовательности, ограниченной диапазоном [first,last), новую последовательность, в которой значение каждого элемента равно сумме всех предыдущих, включая и данный. Так, из последовательности {0,1,1,2,3,5,8} будет создана {0,1,2,4,7,12,20}, где, например, четвертый элемент равен сумме трех предыдущих (0,1,1) и его самого (2), что дает значение 4.
Во втором варианте вместо оператора сложения используется бинарная операция, заданная программистом. Предположим, мы задали последовательность {1,2,3,4} и объект-функцию times<int>. Результатом будет {1,2,6,24}. В обоих случаях итератор записи OutputIterator указывает на элемент за последним элементом новой последовательности.
partial_sum() – это один из численных алгоритмов. Для его использования необходимо включить в программу стандартный заголовочный файл <numeric>.
#include <numeric>
#include <vector>
#include <iostream.h>
/*
* печатается:
элементы: 1 3 4 5 7 8 9
частичная сумма элементов:
1 4 8 13 20 28 37
частичная сумма элементов с использованием times<int>():
1 3 12 60 420 3360 30240
*/
int main()
{
const int ia_size = 7;
int ia[ ia_size ] = { 1, 3, 4, 5, 7, 8, 9 };
int ia_res[ ia_size ];
ostream_iterator< int > outfile( cout, " " );
vector< int, allocator > vec( ia, ia+ia_size );
vector< int, allocator > vec_res( vec.size() );
cout << "элементы: ";
copy( ia, ia+ia_size, outfile ); cout << endl;
cout << "частичная сумма элементов:\n";
partial_sum( ia, ia+ia_size, ia_res );
copy( ia_res, ia_res+ia_size, outfile ); cout << endl;
cout << "частичная сумма элементов с использованием times<int>():\n";
partial_sum( vec.begin(), vec.end(), vec_res.begin(),
times<int>() );
copy( vec_res.begin(), vec_res.end(), outfile );
cout << endl;
}