Читать «Полный справочник по С++» онлайн - страница 422

Герберт Шилдт

cout << "Результат: “; for(i=0; i<10; i++) cout « r[i] << " ";

return 0;

Результат работы программы приведен ниже.

■Исходная последовательность: 0 2 4 6 8 10 12 14 16 18 Результат: 0222222222

Как видим, результирующая последовательность содержит разности между значениями соседних элементов.

Алгоритм inner_product

Алгоритм inner_product () вычисляет скалярное произведение двух последовательностей и возвращает результат. Он имеет следующие прототипы, template cclass Inlterl, class Inlter2, class T>

T inner_product (Inlterl start I, Inlterl end],

Inlter2 start2, T v) ; template cclass Inlterl, class Inlter2, class T, class BinFuncl, class BinFunc2>

T inner_product (Inlterl start 1, Inlterl endl, Inlter2 start2, T v, BinFuncl fund, BinFunc2 fund) ;

Здесь параметры startl и endl являются итераторами, установленными на начало и конец первой последовательности. Итератор start2 установлен на начало второй последовательности. Параметр v задает значение, с которого начинается суммирование. Во второй версии бинарная функция fund определяет способ суммирования, а бинарная функция func2 — способ перемножения элементов последовательностей.

Рассмотрим программу, демонстрирующую алгоритм inner_product ().

// Демонстрация алгоритма inner_product()

#include <iostream>

#include <vector>

#include cnumerio using namespace std;

int main()

{

vector<int> vl(5), v2(5); int i, total;

for(i=0; i<5; i++) vl[i] = i; for(i=0; i<5; i++) v2[i] = i+2;

total = inner_product(vl.begin(), vl.endO,

v2.begin()# 0);

cout « "Скалярное произведение: 11 << total;

return 0;

Результат работы программы приведен ниже.

(Скалярное произведение: 50

Алгоритм partial_sum

Алгоритм partial_sum() суммирует значения элементов последовательности, записывая текущую сумму в новую последовательность. (Иначе говоря, он создает последовательность, в которой хранятся частичные суммы элементов исходной последовательности.) Первый элемент результата совпадает с первым элементом исходной последовательности. Прототипы алгоритмов имеют следующий вид.

template cclass Inlter, class OutIter>

Outlter partial_sum(Inlter start, Inlter end, Outlter result); template cclass Inlter, class Outlter, class BinFunc>

Outlter partial_sum(Inlter start, Inlter end,

Outlter result, BinFunc func) ;

Здесь параметры start и end являются итераторами, установленными на начало и конец исходной последовательности. Результирующая последовательность хранится в объекте, на который ссылается итератор resut. Во второй версии способ суммирования определяется бинарной функцией func. Алгоритм возвращает итератор result. Рассмотрим пример, демонстрирующий применение алгоритма partial_sum().

Ill Демонстрация алгоритма partial_sum().

♦include ciostream>

♦include cvector>

♦include <numeric> using namespace std;

int main()

{

vector<int> v(5), r(5); int i ;

for(i=0; i<10; i++) v[i] = i; cout << "Исходная последовательность: “; for(i=0; i<5; i++) cout << v[i] << " "; cout « endl;