类别: 算法 | 组件类型: 函数 |
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.