とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

std::inner_product

STL―標準テンプレートライブラリによるC++プログラミング 第2版
内積 (x0 * x1) + (x1 * x2) + (x2 * x3) + ... を計算する。

// P122 ex05-34.cpp
#include<iostream>
#include<numeric>
#include<functional>
int main(){
 using std::cout;
 using std::endl;
 using std::inner_product;
 using std::multiplies;
 using std::plus;
 cout << "Illustrating the generic inner_product algorithm." << endl;
 const int N = 5;
 int a[N], b[N];
 for(int i = 0; i < N; ++i){
  a[i] = i + 1;
  b[i] = i + 2;
 }
 const int res1 = inner_product(a, a + N, b, 0);
 cout << "Inner product as normally defined: " << res1 << endl;
 const int res2 = inner_product(a, a + N, b, 1,
  multiplies<int>(), plus<int>());
 cout << "Inner product with roles of + and * reversed: "
  << res2 << endl;
}

出力:

Illustrating the generic inner_product algorithm.
Inner product as normally defined: 70
Inner product with roles of + and * reversed: 10395