Алгоритм partial_sum()

Алгоритм 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} и объект-функцию timesint. Результатом будет {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

частичная сумма элементов с использованием timesint():

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 "частичная сумма элементов: ";

partial_sum( ia, ia+ia_size, ia_res );

copy( ia_res, ia_res+ia_size, outfile ); cout endl;

cout "частичная сумма элементов с использованием timesint(): ";

partial_sum( vec.begin(), vec.end(), vec_res.begin(),

timesint() );

copy( vec_res.begin(), vec_res.end(), outfile );

cout endl;

}