SGI

累加

类别: 算法 组件类型: 函数

原型

累加是一个重载名称;实际上有两个累加函数。
template <class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);

template <class InputIterator, class T, class BinaryFunction>
T accumulate(InputIterator first, InputIterator last, T init,
             BinaryFunction binary_op);

描述

累加是对求和的推广:它计算init和范围内所有元素的总和(或其他二元运算)[first, last). [1]

函数对象binary_op不需要是可交换的或结合的:所有累加的操作顺序已指定。结果首先初始化为init。 然后,对于每个迭代器i[first, last)中,从头到尾,它被更新为result = result + *i(在第一个版本中)或result = binary_op(result, *i)(在第二个版本中)。

定义

在标准头文件 numeric 中定义,以及在非标准向后兼容头文件 algo.h 中定义。

类型要求

对于第一个版本,即接受两个参数的版本对于第二个版本,即接受三个参数的版本

先决条件

复杂度

线性。 恰好last - first次二元运算调用。

示例

int main()
{
  int A[] = {1, 2, 3, 4, 5};
  const int N = sizeof(A) / sizeof(int);

  cout << "The sum of all elements in A is " 
       << accumulate(A, A + N, 0)
       << endl;

  cout << "The product of all elements in A is "
       << accumulate(A, A + N, 1, multiplies<int>())
       << endl;
}

备注

[1] 有几个原因导致累加以值init开头很重要。 最基本的原因之一是,这允许累加即使[first, last)为空范围也能获得定义明确的结果:如果为空,则返回值为init。 如果要查找中所有元素的总和,则只需将[first, last)作为0传递。init.

另请参阅

内积, 偏和, 相邻差, 计数
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息