33 lines
895 B
C++
33 lines
895 B
C++
#include <numeric>
|
|
|
|
#include "common.h"
|
|
|
|
namespace bench {
|
|
|
|
Data Task::operator()(int min, int max) const {
|
|
Data v(size);
|
|
std::generate_n(std::begin(v), size, [&, i=0]() mutable { return (++i)%(max-min+1) + min; });
|
|
return v;
|
|
};
|
|
|
|
Data taskD(Data const& data) {
|
|
Data out(data.size()+2);
|
|
std::copy(std::begin(data), std::end(data), std::begin(out)+2);
|
|
out[0] = std::accumulate(std::begin(data), std::end(data), Data::value_type{});
|
|
out[1] = out[0]&1? out[0]*out[0] : out[0];
|
|
return out;
|
|
}
|
|
|
|
Data const& select(Data const& a, Data const& b) {
|
|
Data::value_type sumA = std::accumulate(std::begin(a), std::end(a), Data::value_type{});
|
|
Data::value_type sumB = std::accumulate(std::begin(b), std::end(b), Data::value_type{});
|
|
|
|
return sumA < sumB? a : b;
|
|
}
|
|
|
|
Data::value_type project(Data const& a, Data::value_type const& init) {
|
|
return std::accumulate(std::begin(a), std::end(a), init);
|
|
}
|
|
|
|
}
|