diff --git a/3_squares_of_a_sorted_array.cpp b/3_squares_of_a_sorted_array.cpp index a983b88..7eeddb1 100644 --- a/3_squares_of_a_sorted_array.cpp +++ b/3_squares_of_a_sorted_array.cpp @@ -2,6 +2,7 @@ */ #include +#include #include template inline T absolute(T num) { @@ -11,9 +12,9 @@ template inline T absolute(T num) { template inline T square(T num) { return num * num; } template -std::vector &solution(const std::vector &sorted_input) { - std::vector *result = new std::vector(sorted_input.size()); - std::vector &sorted_output = *result; +std::unique_ptr> solution(const std::vector &sorted_input) { + std::unique_ptr> sorted_output = + std::make_unique>(sorted_input.size()); unsigned long long p1 = 0, p2 = 1; while (p2 < sorted_input.size()) { if (absolute(sorted_input[p2]) <= absolute(sorted_input[p1])) @@ -27,21 +28,21 @@ std::vector &solution(const std::vector &sorted_input) { unsigned long long output_p = 0; while (p1 < p2 && p2 < sorted_input.size()) { if (absolute(sorted_input[p1]) < absolute(sorted_input[p2])) - sorted_output[output_p++] = (square(sorted_input[p1--])); + (*sorted_output)[output_p++] = (square(sorted_input[p1--])); else - sorted_output[output_p++] = square(sorted_input[p2++]); + (*sorted_output)[output_p++] = square(sorted_input[p2++]); } while (p1 < p2) - sorted_output[output_p++] = square(sorted_input[p1--]); + (*sorted_output)[output_p++] = square(sorted_input[p1--]); while (p2 < sorted_input.size()) - sorted_output[output_p++] = square(sorted_input[p2++]); + (*sorted_output)[output_p++] = square(sorted_input[p2++]); return sorted_output; } int main() { - std::vector &result = solution(std::vector{-4, -1, 0, 3, 10}); - for (const int num : result) + std::unique_ptr> result = + solution(std::vector{-4, -1, 0, 3, 10}); + for (const int num : *result) std::cout << num << ", "; std::cout << std::endl; - delete &result; } \ No newline at end of file