ACM之C++STL泛型编程

本文介绍了C++ STL中的accumulate函数,用于计算元素的和或使用指定二进制操作计算范围内的结果。文章通过应用实例进行详细解释。
摘要由CSDN通过智能技术生成

一.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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值