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

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

自作 accumulate + 普通の関数

STL―標準テンプレートライブラリによるC++プログラミング 第2版

// P181 ex08-01.cpp
template<typename InputIterator, typename T>
T accumulate1(InputIterator first, InputIterator last, T init,
              T (*binary_function)(T x, T y))
{
 while(first != last){
  init = binary_function(init, *first);
  ++first;
 }
 return init;
}
int multiply(int x, int y){return x * y;}
#include<iostream>
#include<vector>
#include<cassert>
int main(){
 using std::cout;
 using std::endl;
 using std::vector;
 int x[] = {2, 3, 5, 7, 11};
 vector<int> v(x, x + 5);
 const int product = accumulate1(v.begin(), v.end(), 1, multiply);
 assert(product == 2310);
 cout << " --- Ok." << endl;
}