Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ accumulate(3C++) — Sun WorkShop 5.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

accumulate(3C++)

Standard C++ Library
Copyright 1998, Rogue Wave Software, Inc.

 

NAME

 
accumulate
 
 - Accumulates all elements within a range into a single value.
 
 
 

SYNOPSIS

 
 

#include <numeric>
template <class InputIterator, class T>
T accumulate (InputIterator first,

InputIterator last,
T init);

 
template <class InputIterator,

class T,
class BinaryOperation>

T accumulate (InputIterator first,

InputIterator last,
T init,
BinaryOperation binary_op);
 
 
 

DESCRIPTION

 
 
accumulate applies a binary operation to init and each value in the range [first,last). The result of each operation is returned in init. This process aggregates the result of performing the operation on every element of the sequence into a single value. 
 
Accumulation is done by initializing the accumulator acc with the initial value init and then modifying it with acc = acc + ∗i or acc = binary_op(acc, ∗i) for every iterator i in the range [first, last) in order. If the sequence is empty, accumulate returns init. 
 
binary_op should not have side effects. 
 
 
 

COMPLEXITY

 
 
accumulate performs exactly last-first applications of the binary operation (operator+ by default). 
 
 
 

EXAMPLE

 
 
 

//
// accum.cpp
//

#include <numeric>   //for accumulate
#include <vector>    //for vector
#include <functional> //for times
#include <iostream>

using namespace std;
 
int main()

{

//
//Typedef for vector iterators
//

typedef vector<int>::iterator iterator;

//
//Initialize a vector using an array of ints
//

int d1[10] = {1,2,3,4,5,6,7,8,9,10};
vector<int> v1(d1, d1+10);

//
//Accumulate sums and products
//

int sum = accumulate(v1.begin(), v1.end(), 0);
int prod = accumulate(v1.begin(), v1.end(),

1, times<int>());

//
//Output the results
//

cout << "For the series: ";
for(iterator i = v1.begin(); i != v1.end(); i++)

cout << ∗i << " ";

 

cout << " where N = 10." << endl;
cout << "The sum = (N∗N + N)/2 = " << sum << endl;
cout << "The product = N! = " << prod << endl;
return 0;

}
 

Program Output
 
 
 

 
For the series: 1 2 3 4 5 6 7 8 9 10  where N = 10.
The sum = (N∗N + N)/2 = 55
The product = N! = 3628800
 
 
 

WARNINGS

 
 
If your compiler does not support default template parameters, then you always need to supply the Allocator template argument. For instance, you have to write:
 
 
vector<int,allocator<int> >
 
instead of:
 
 
vector<int>
 
If your compiler does not support namespaces, then you do not need the using declaration for std. 
 

Rogue Wave Software  —  Last change: 02 Apr 1998

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026