(C++) std::accumulate example 2: summing a std::vector of a custom class using a C++11 lambda expression
January 8, 2018 ยท View on GitHub
std::accumulate example 2: summing a std::vector of a custom class using a C++11 lambda expression is a std::accumulate example to sum a std::vector of a custom class using a C++11 lambda expression.
#include <cassert>
#include <numeric>
#include <vector>
class my_class
{
public:
my_class(const int x = 0) : m_x{x} {}
int get_x() const noexcept { return m_x; }
private:
int m_x;
};
int main()
{
//Create a std::vector
std::vector<my_class> v;
for (int i=0; i!=10; ++i) { v.push_back(my_class(i)); }
//Sum the std::vector using lambda expression
const int sum{
std::accumulate(
std::begin(v),
std::end(v),
0, // '0' is the initial value
[](const int sum, const my_class& m)
{
return sum + m.get_x();
}
)
};
//Assume std::accumulate works correctly
assert(sum == 45);
}