C++には標準でaccumulateありました。ごめんなさい。

コメント欄で教えてもらいましたが、C++も自分で書く必要はなかったようです。さすがは変態言語。

http://codepad.org/IhxArZGN

#include<vector>
#include<list>
#include<string>
#include<iostream>
#include<numeric>        //accumulate
#include<functional>    //multipliesなど

using namespace std;

int main(){
	//iterator渡しなのでvectorでもおk
	vector<int> vec(10);
	for( int i=0; i<10; i++ ){
		vec[i] = i+1;
	}
	//デフォルトでは加算
	cout << accumulate(vec.begin(), vec.end(), 0) << endl;

	//multipliesとかも渡せる。
	list<int> ls;
	for( int i=0; i<5; i++ ){
		ls.push_back(i+1);
	}
	cout << accumulate(ls.begin(), ls.end(), 1, multiplies<int>()) << endl;

	//iterator渡しということは、ポインタ渡してもおkwwww
	string array[] = { "a", "b", "c" };
	string empty("");
	cout << accumulate(array, array+3, empty) << endl;
	return 0;
}