InputIterator first, InputIterator last,
Type init );
template class InputIterator, class Type,
class BinaryOperation
Type accumulate(
InputIterator first, InputIterator last,
Type init, BinaryOperation op );
Первый вариант accumulate() вычисляет сумму значений элементов последовательности из диапазона, ограниченного парой итераторов [first,last), с начальным значением, которое задано параметром init. Например, если дана последовательность {1,1,2,3,5,8} и начальное значение 0, то результатом работы алгоритма будет 20. Во втором варианте вместо оператора сложения к элементам применяется переданная бинарная операция. Если бы мы передали алгоритму accumulate() объект-функцию times и начальное значение 1, то получили бы результат 240. accumulate() - это один из численных алгоритмов; для его использования в программу необходимо включить заголовочный файл .
#include numeric
#include list
#include functional
#include iostream.h
/*
* выход:
* accumulate()
* работает с последовательностью {1,2,3,4}
*результат для сложения по умолчанию: 10
*результат для объекта-функции plusint: 10
*/
int main()
{
int ia[] = { 1, 2, 3, 4 };
listint,allocator ilist( ia, ia+4 );
int ia_result = accumulate(&ia[0], &ia[4], 0);
int ilist_res = accumulate(
ilist.begin(), ilist.end(), 0, plusint() );
cout "accumulate()\n\t"
"работает с последовательностью {1,2,3,4}\n\t"
"результат для сложения по умолчанию: "
ia_result "\n\t"
"результат для объекта-функции plusint: "
ilist_res
endl;
return 0;
}
Алгоритм adjacent_difference()
template class InputIterator, class OutputIterator
OutputIterator adjacent_difference(
InputIterator first, InputIterator last,
OutputIterator result );
template class InputIterator, class OutputIterator
class BinaryOperation
OutputIterator adjacent_difference(
InputIterator first, InputIterator last,
OutputIterator result, BinaryOperation op );
Первый вариант adjacent_difference() создает новую последовательность, в которой значение каждого элемента, кроме первого, равно разности между текущим и предыдущим элементами исходной последовательности. Например, если дано {0,1,1,2,3,5,8}, то первым элементом новой последовательности будет копия: 0. Вторым - разность первых двух элементов исходной последовательности: 1. Третий элемент равен разности третьего и второго элементов: 1-1=0, и т.д. В результате мы получим последовательность {0,1,0,1,1,2,3}.
Во втором варианте разность соседних элементов вычисляется с помощью указанной бинарной операции. Возьмем ту же исходную последовательность и передадим объект-функцию timesint. Как и раньше, первый элемент просто копируется. Второй элемент - это произведение первого и второго элементов исходной последовательности; он тоже равен 0. Третий элемент - произведение второго и третьего элементов исходной последовательности: 1 * 1 = 1, и т.д. Результат - {0,1,2,6,15,40}.
В обоих вариантах итератор OutputIterator указывает на элемент, расположенный за последним элементом новой последовательности. adjacent_difference() - это один из численных алгоритмов, для его использования в программу необходимо включить заголовочный файл .
#include numeric
#include list
#include functional
#include iterator
#include iostream.h
int main()
{
int ia[] = { 1, 1, 2, 3, 5, 8 };
listint,allocator ilist(ia, ia+6);
listint,allocator ilist_result(ilist.size());
adjacent_difference(ilist.begin(), ilist.end(),
ilist_result.begin() );
// на выходе печатается:
// 1 0 1 1 2 3
copy( ilist_result.begin(), ilist_result.end(),