С++ для начинающих


Алгоритм 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;

}



Содержание раздела