11.3. Computing the Sum and Mean of Elements in a Container

Problem

You want to compute the sum and mean of elements in a container of numbers.

Solution

You can use the `accumulate` function from the `<numeric>` header to compute the sum, and then divide by the size to get the mean. Example 11-5 demonstrates this using a vector.

Example 11-5. Computing the sum and mean of a container

```#include <numeric>
#include <iostream>
#include <vector>

using namespace std;

int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
int sum = accumulate(v.begin(), v.end(), 0);
double mean = double(sum) / v.size();
cout << "sum = " << sum << endl;
cout << "count = " << v.size() << endl;
cout << "mean = " << mean << endl;
}```

The program in Example 11-5 produces the following output:

```sum = 10
count = 4
mean = 2.5```

Discussion

The `accumulate` function generally provides the most efficient and simplest method to find the sum of all the elements in a container.

Even though this recipe has a relatively simple solution, writing your own generic function to compute a mean is not so easy. Example 11-6 shows one way to write such a generic function:

Example 11-6. A generic function to compute the mean

```template<class Iter_T>
double computeMean(Iter_T first, Iter_T last) {
return static_cast<double>(accumulate(first, last, 0.0))
/ distance(first, last);
}```

The `computeMean` function in Example 11-6 is sufficient for most purposes but it has one restriction: it doesn’t work with input iterators ...

Get C++ Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.