一.accumulate函数
介绍:
用来计算特定范围内(包括连续的部分和初始值)所有元素的和,除此之外,还可以用指定的二进制操作来计算特定范围内的元素结果。其头文件在numeric中。
应用实例(最好的解释就是举例子)
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main( )
{
vector <int> v1, v2( 20 );
vector <int>::iterator It1, It2;
int i;
for ( i = 1 ; i < 10 ; i++ )
{
v1.push_back( i );
}
cout << "v1中元素的值为: ( " ;
for ( It1 = v1.begin( ) ; It1 != v1.end( ) ; It1++ )
cout << *It1 << " ";
cout << ")." << endl;
// 求和
int res;
res = accumulate ( v1.begin ( ) , v1.end ( ) , 0 );
cout << "整数从1到9的和为: "
<< res << "." << endl;
// 构造一个前n项和的向量
int j=0;
for ( It1 = v1.begin( ) + 1; It1 <= v1.end( ) ; It1++ )
{
res = accumulate ( v1.begin ( ) , It1 , 0 );
v2 [ j ] = res;
j++;
if(It1==v1.end())
break;//防止越界访问
}
cout << "前n项和分别为:\n ( " ;
for ( It2 = v2.begin( ) ; It2 != v2.end( ) ; It2++ )
cout << *It2 << " ";
cout << ")." << endl << endl;
// accumulate函数的第二个功能,计算连乘积
vector <int> v3, v4( 10 );
vector <int>::iterator It3, It4;
for ( j= 1 ; j< 11 ; j++ )
{
v3.push_back( j );
}
cout << "向量v3的初始值分别为:\n ( " ;
for ( It3 = v3.begin( ) ; It3 != v3.end( ) ; It3++ )
cout << *It3 << " ";
cout << ")." << endl;
res = accumulate ( v3.begin ( ) , v3.end ( ) , 1 , multiplies<int>( ) );
cout << "整数1到10的连乘积为: "
<< res << "." << endl;
// 构造一个前n项积的向量
int k = 0, ppartotal;
for ( It3 = v3.begin( ) + 1; It3 <= v3.end( ) ; It3++ ) {
ppartotal = accumulate ( v3.begin ( ) , It3 , 1 , multiplies<int>( ) );
v4 [ k ] = ppartotal;
k++;
if(It3==v3.end())
break;//防止越界访问
}
cout << "前n项积分别为:\n ( " ;
for ( It4 = v4.begin( ) ; It4 != v4.end( ) ; It4++ )
cout << *It4 << " ";
cout << ")." << endl;
}