类别: 算法 | 组件类型: 函数 |
template <class InputIterator, class OutputIterator> OutputIterator partial_sum(InputIterator first, InputIterator last, OutputIterator result); template <class InputIterator, class OutputIterator, class BinaryOperation> OutputIterator partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op);
更准确地说,运行总和首先初始化为*first并赋值给*result。对于每个迭代器i在[first + 1, last)中,从开始到结束的顺序,总和通过sum = sum + *i(在第一个版本中)或sum = binary_op(sum, *i)(在第二个版本中)更新,并赋值给*(result + (i - first)). [2]
int main() { const int N = 10; int A[N]; fill(A, A+N, 1); cout << "A: "; copy(A, A+N, ostream_iterator<int>(cout, " ")); cout << endl; cout << "Partial sums of A: "; partial_sum(A, A+N, ostream_iterator<int>(cout, " ")); cout << endl; }
[1] 注意result允许与first是相同的迭代器。这对于“就地”计算偏和很有用。
[2] 二元运算不需要是结合的或交换的:所有运算的顺序都是指定的。