Снова обратимся к алгоритму accumulate, на этот раз используя наш собственный функциональный объект. Для заданного массива а, содержащего, скажем, четыре элемента, вычисляется следующее значение:
1 * а[0] + 2 * а[1] + 4 * а[2] + 8 * а[3]
Кроме функции operatori) наш функциональный объект содержит член типа int, который хранит последовательные степени 1,2,4 и 8, а также конструктор для инициализации этого члена класса:
// ассшпЗ .срр: Вычисление следующей суммы:
// 1 * а[0] + 2 * а[1] + 4 * а[2] + 8 * а[3].
#include <iostream>
#include <numeric>
using namespace std;
class fun { public:
fun(){i = 1;}
int operator()(int x, int y)
{ int u = x + i * y; i *= 2; return u;
} private:
int i ; };
int main()
{ const int N = 4;
int a[N] = {7, 6, 9, 2}, prod = 0;
prod = accumulated, a+N, prod, fun());
cout « prod « endl;
return 0; }
Эта программа выведет значение 71 (= 1x7 + 2x6 + 4x9 + 8x2).
<< назад вперед >>