| 类别: 算法 | 组件类型: 函数 |
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);
该函数对象binary_op不需要是可交换的或结合的:所有累加的操作顺序已指定。结果首先初始化为init。 然后,对于每个迭代器i在[first, last)中,从头到尾,它被更新为result = result + *i(在第一个版本中)或result = binary_op(result, *i)(在第二个版本中)。
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.