Снова обратимся к алгоритму 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).


<< назад вперед >>