先上程序
#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
#include<numeric> // accumulate在该头文件而不是algorithm
using namespace std;
int main()
{
istream_iterator<double>int_it(cin), eof;
ostream_iterator<double>int_ot(cout, " ");
vector<double> dvec(int_it, eof);
copy(dvec.begin(), dvec.end(), int_ot);
cout << endl;
cout << "序列的和为" << accumulate(dvec.begin(), dvec.end(), 0) << endl;
}
如果我输入了1.2 3.3 5.5,那么我们可能理所当然的认为最后的输出为10.0,然而结果却是9,这是为什么呢?
原因是accumulate的第三个参数是和的初值,它决定了函数的返回类型,以及函数中使用哪个加法运算符。本例子中我们的初值是0,因此告知accumulate和是整型的,使用整形加法运算符,所有运算过程是整形加法的运算,小数点舍去,结果也是整形。想要得到浮点型10.0,就将0换成0.0.