accumulate

通过计算顺序部分和计算所有元素的总和在指定范围的包含某些初始值或计算从使用指定的二元运算类似获得的顺序部分的结果除了总和之外。

template<class InputIterator, class Type>
   Type accumulate(
      InputIterator _First, 
      InputIterator _Last, 
      Type _Val
   );
template<class InputIterator, class Type, class BinaryOperation>
   Type accumulate(
      InputIterator _First, 
      InputIterator _Last, 
      Type _Val, 
      BinaryOperation _Binary_op
   );

参数

  • _First
    解决输入的迭代器在基于指定的二进制操作将进行求和或合并范围的第一个元素。

  • _Last
    解决输入的迭代器在基于是在最终元素之外的某个位置的指定二进制操作将进行求和或合并的范围的最后一个组件重复的累计实际上由了。

  • _Val
    每个元素又添加或将与基于指定的二元运算的初始值。

  • _Binary_op
    将对指定的大小和以前的应用程序的结果的每个元素的二元运算。

返回值

_Val 和所有元素的总和在指定的范围第一个模板函数的或事件,第二个模板函数的,将该二进制操作的结果中指定,而不是总和操作,为(PartialResult,*Iter),其中 PartialResult 是操作和 Iter 以前的应用程序的结果是一个指向元素的迭代器在范围。

备注

初始值确保将具有一个定义完善的结果,当范围为空时,在 _Val 返回情况下。 该二进制操作不需要关联或可交换的。 该结果初始化为原始值 _Val 然后 结果 = _Binary_op (因此,*****Iter)通过范围迭代计算,Iter 是指向该范围内的连续元素的迭代器。 该范围必须是有效的,并且复杂是线性与该范围。 该二元运算符的返回类型必须是转换为 *** 类型 *** 在迭代期间确保关闭。

示例

// numeric_accum.cpp
// compile with: /EHsc
#include <vector>
#include <numeric>
#include <functional>
#include <iostream>

int main( )
{
   using namespace std;

   vector <int> v1, v2(20);
   vector <int>::iterator iter1, iter2;

   int i;
   for (i = 1; i < 21; i++)
   {
      v1.push_back(i);
   }

   cout << "The original vector v1 is:\n ( " ;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++)
      cout << *iter1 << " ";
   cout << ")." << endl;

   // The first member function for the accumulated sum
   int total;
   total = accumulate(v1.begin(), v1.end(), 0);

   cout << "The sum of the integers from 1 to 20 is: "
        << total << "." << endl;

   // Constructing a vector of partial sums
   int j = 0, partotal;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++)
   {
      partotal = accumulate(v1.begin(), iter1 + 1, 0);
      v2[j] = partotal;
      j++;
   }

   cout << "The vector of partial sums is:\n ( " ;
   for (iter2 = v2.begin(); iter2 != v2.end(); iter2++)
      cout << *iter2 << " ";
   cout << ")." << endl << endl;

   // The second member function for the accumulated product
   vector <int> v3, v4(10);
   vector <int>::iterator iter3, iter4;

   int s;
   for (s = 1; s < 11; s++)
   {
      v3.push_back(s);
   }

   cout << "The original vector v3 is:\n ( " ;
   for (iter3 = v3.begin(); iter3 != v3.end(); iter3++)
      cout << *iter3 << " ";
   cout << ")." << endl;

   int ptotal;
   ptotal = accumulate(v3.begin(), v3.end(), 1, multiplies<int>());

   cout << "The product of the integers from 1 to 10 is: "
        << ptotal << "." << endl;

   // Constructing a vector of partial products
   int k = 0, ppartotal;
   for (iter3 = v3.begin(); iter3 != v3.end(); iter3++) {
      ppartotal = accumulate(v3.begin(), iter3 + 1, 1, multiplies<int>());
      v4[k] = ppartotal;
      k++;
   }

   cout << "The vector of partial products is:\n ( " ;
   for (iter4 = v4.begin(); iter4 != v4.end(); iter4++)
      cout << *iter4 << " ";
   cout << ")." << endl;
}
  
  
  
  
  
  

要求

标头: <numeric>

命名空间: std

请参见

参考

accumulate, copy, 和 vector::push_back

标准模板库