partial_sum

C++ Library  
 

Header

<numeric>
template<class InputIterator, class OutputIterator> inline
OutputIterator partial_sum(InputIterator first, InputIterator last, OutputIterator first2)

template<class InputIterator, class OutputIterator, class BinaryOperator> inline
     OutputIterator partial_sum(InputIterator first, InputIterator last, OutputIterator first2,
     BinaryOperator binary_op)

Fills a sequence with a running total. The first element in the output sequence will be a copy of the first element in the input sequence. The second output element will be a sum of the first two input elements, the third input element will be the sum of the three input elements, and so on. The last output element will be a sum of the entire input sequence. If you call the second version of the algorithm, you can substitute a different function for addition operation, which gives you a intermediate results of some other kind.

Assigns to every iterator i in the range [result,result + (last - first)) a value correspondingly equal to ((...(*first + *(first + 1)) + ...) + *(first + (i - result))) - or - binary_op(binary_op(..., binary_op(*first, *(first + 1)),...), *(first + (i - result))). In other words, *(result+i) = init + *(first+0) + *(first+1) + ... + *(first+i).


Sample

#include <iostream>
#include <numeric>
#include <functional>
#include <vector>
#include <iterator>

using namespace std;


typedef vector < int > IntArray;
typedef ostream_iterator < int, char, char_traits<char> > IntOstreamIt;

void main ()
{
    IntOstreamIt itOstream(cout," ");

    // Initialize the array
    IntArray rgI;
    for (int i=1; i<=10; i++) rgI.push_back(i);

    // Print the arrays
    cout << "Array: ";
    copy(rgI.begin(),rgI.end(),itOstream);
    cout << endl;

    // The result array must be at least the same size as the data array
    IntArray rgIresult(rgI.size());

    // Compute the partial sum of the array
    partial_sum(rgI.begin(),rgI.end(),rgIresult.begin());

    // Print the array of partial sums
    cout << "Array of partial sums: ";
    copy(rgIresult.begin(),rgIresult.end(),itOstream);
    cout << endl;

    // Compute the partial product of the array
    partial_sum(rgI.begin(),rgI.end(),rgIresult.begin(),multiplies<int>());

    // Print the array of partial products
    cout << "Array of partial products: ";
    partial_sum(rgIresult.begin(),rgIresult.end(),itOstream);
    cout << endl;
}

Program Output

Array: 1 2 3 4 5 6 7 8 9 10
Array of partial sums: 1 3 6 10 15 21 28 36 45 55
Array of partial products: 1 3 9 33 153 873 5913 46233 409113 4037913

© 1997 Microsoft Corporation. All rights reserved. Terms of Use.