diff --git a/modules/08_stl_algorithms/src/transform_reduce.cpp b/modules/08_stl_algorithms/src/transform_reduce.cpp index 0e17e8b..b2d87eb 100644 --- a/modules/08_stl_algorithms/src/transform_reduce.cpp +++ b/modules/08_stl_algorithms/src/transform_reduce.cpp @@ -1,9 +1,20 @@ #include "transform_reduce.hpp" +#include + namespace stl_algorithms { -auto square_all(const std::vector& data) -> std::vector { (void)data; return {}; } -auto sum_all(const std::vector& data) -> int { (void)data; return 0; } -auto product_positive(const std::vector& data) -> long long { (void)data; return 0; } +auto square_all(const std::vector& data) -> std::vector { + auto result = std::vector{}; + result.reserve(data.size()); + std::ranges::transform(data, std::back_inserter(result), [](const int value) { return value * value; }); + return result; +} +auto sum_all(const std::vector& data) -> int { + return std::ranges::fold_left(data, 0, std::plus{}); +} +auto product_positive(const std::vector& data) -> long long { + return std::ranges::fold_left(data, 1, [](const int accumulator, const int value) { return value > 0 ? value * accumulator : accumulator; }); +} } // namespace stl_algorithms