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