//accumulate:[root@localhost testc++]# vi 11-chukuisuanf.cpp
1 #include <iostream>
2 #include <vector>
3 #include <algorithm>
4 #include <numeric>
5 using namespace std;
6
7 int main()
8 {
9 int ival;
10 vector<int> vec;
11 while( cin >> ival)
12 vec.push_back(ival);
13 int sum =accumulate(vec.begin(),vec.end(),0);
14 cout << sum << endl;
15 return 0;
16 }
accumulate有三个形参:头两个元素指定要累加的范围,第三个是要累加的初始值。accumulate函数将他的一个内部变量设置为指定的初值,然后在此基础上,累加输入范围内所有元素的值。accumulate算法返回累加的结果,其返回类型就是第三个参数的类型。
用于指定累加初始值的第三个实参是必要的,因为accumulate对将要累加的元素类型一无所知。因此,除此之外,没有别的办法创建合适的起始值或这关联的类型。
容器内元素类型一定要与第三个实参的类型匹配,或者可以转换为第三个参数的类型
但即使强制转换的类型 往往也会报错,例如 double型转换为int时,会截去小数部分。取得和只是整数部分的,会产生一个较大的误差。
但如果是 int型强制转换为double就没事了!!!!