Читать «Полный справочник по С++» онлайн - страница 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;