好贷网好贷款

C++ STL算法系列3---求和:accumulate

发布时间:2016-12-3 3:59:29 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"C++ STL算法系列3---求和:accumulate",主要涉及到C++ STL算法系列3---求和:accumulate方面的内容,对于C++ STL算法系列3---求和:accumulate感兴趣的同学可以参考一下。

该算法在numeric头文件中定义。 假设vec是一个int型的vector对象,下面的代码: //sum the elements in vec starting the summation with the value 42 int sum = accumulate(vec.begin() , vec.end() , 42); 将sum设置为vec的元素之和再加上42。 accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。 accumulate函数将它的一个内部变量设置为指定的初始值,然后在此初值上累加输入范围内所有元素的值。accumulate算法返回累加的结果,其返回类型就是其第三个实参的类型。 accumulate对要累加的元素类型一无所知,这个事实有两层含义。首先,调用该函数时必需传递一个初始值,否则,accumulate将不知道使用什么初始值。其次,容器内的元素类型必须与第三个实参的类型匹配,或者可转换为第三个实参的类型。在accumulate内部,第三个实参用作累加的起点;容器内的元素按顺序连续累加到综合之中。因此,必须能够将元素类型加到总和类型上。   假定V是vector<double>类型的对象,则调用accumulate<v.begin() , v.end() , 0>是否有错?如果有的话,错在哪里? 从函数调用上看没有错误。 调用accumulate函数必须满足的条件包括:容器内的元素类型必须与第三个实参的类型匹配,或者可转换为第三个实参的类型。上述调用中的第三个实参为int类型,而vector对象中的元素的类型为double类型,可以转换为int类型。 但计算的结果不准确。因为将double类型转换为int类型会截去小数部分,得到的求和结果是各元素的整数部分的和,是一个int类型的值,与实际的元素值总和相比会有比较大的误差。     考虑下面的例子,可以使用accumulate把string型的vector容器中的元素连接起来: //concatenate elements from V and store in sum string sum = accumulate(v.begin() , v.end() , string(" ")); 这个函数调用的效果是:从空字符串开始,把vec里的每个元素连接成一个字符串。   下面让我们用一个具体事例来说明:用accumulate统计vector<int>容器对象中的元素之和。 1 //读取一系列int型数据,并将它们存储到vector对象中, 2 //然后使用algorithm头文件中定义的名为accumulate的函数, 3 //统计vector对象中的元素之和 4 #include<iostream> 5 #include<vector> 6 #include<numeric> 7 using namespace std; 8 9 int main() 10 { 11 int ival; 12 vector<int> ivec; 13 14 //读入int型数据并存储到vector对象中,直至遇到文件结束符 15 cout<<"Enter some integers(Ctrl+z to end): "<<endl; 16 while(cin >> ival) 17 ivec.push_back(ival); 18 19 //使用accumulate函数统计vector对象中的元素之和并输出结果 20 cout<<"summation of elements in the vector: " 21 <<accumulate(ivec.begin() , ivec.end() , 0) //统计vector对象中的元素之和 22 <<endl; 23 24 return 0; 25 }  

上一篇:找对象,上lamp兄弟连!
下一篇:26部文学经典的开场白和结束语

相关文章

相关评论