template <typename Vec>
Vec suma(const Vec &a, const Vec &b)
{
Vec res;
auto out = std::back_inserter(res);
if (a.size() < b.size()) {
std::transform(a.begin(), a.end(), b.begin(), out, std::plus<>{});
} else {
std::transform(b.begin(), b.end(), a.begin(), out, std::plus<>{});
}
return res;
}
Albo
template <typename Vec>
Vec suma(const Vec &a, const Vec &b)
{
Vec res(std::min(a.size(), b.size()));
if (a.size() < b.size()) {
std::transform(a.begin(), a.end(), b.begin(), res.begin(), std::plus<>{});
} else {
std::transform(b.begin(), b.end(), a.begin(), res.begin(), std::plus<>{});
}
return res;
}
Bez ifów:
template <typename Vec>
Vec suma(const Vec &a, const Vec &b)
{
auto n = std::min(a.size(), b.size());
Vec res(n);
std::transform(a.begin(), a.begin() + n, b.begin(), res.begin(), std::plus<>{});
return res;
}