Improvement: use smart pointer for RAII i.e. Scope-Bound Memory Management
This commit is contained in:
		
							parent
							
								
									39bd375b16
								
							
						
					
					
						commit
						7551e97cd4
					
				@ -2,6 +2,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <iostream>
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <memory>
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename T> inline T absolute(T num) {
 | 
					template <typename T> inline T absolute(T num) {
 | 
				
			||||||
@ -11,9 +12,9 @@ template <typename T> inline T absolute(T num) {
 | 
				
			|||||||
template <typename T> inline T square(T num) { return num * num; }
 | 
					template <typename T> inline T square(T num) { return num * num; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
std::vector<T> &solution(const std::vector<T> &sorted_input) {
 | 
					std::unique_ptr<std::vector<T>> solution(const std::vector<T> &sorted_input) {
 | 
				
			||||||
  std::vector<T> *result = new std::vector<T>(sorted_input.size());
 | 
					  std::unique_ptr<std::vector<T>> sorted_output =
 | 
				
			||||||
  std::vector<T> &sorted_output = *result;
 | 
					      std::make_unique<std::vector<T>>(sorted_input.size());
 | 
				
			||||||
  unsigned long long p1 = 0, p2 = 1;
 | 
					  unsigned long long p1 = 0, p2 = 1;
 | 
				
			||||||
  while (p2 < sorted_input.size()) {
 | 
					  while (p2 < sorted_input.size()) {
 | 
				
			||||||
    if (absolute(sorted_input[p2]) <= absolute(sorted_input[p1]))
 | 
					    if (absolute(sorted_input[p2]) <= absolute(sorted_input[p1]))
 | 
				
			||||||
@ -27,21 +28,21 @@ std::vector<T> &solution(const std::vector<T> &sorted_input) {
 | 
				
			|||||||
  unsigned long long output_p = 0;
 | 
					  unsigned long long output_p = 0;
 | 
				
			||||||
  while (p1 < p2 && p2 < sorted_input.size()) {
 | 
					  while (p1 < p2 && p2 < sorted_input.size()) {
 | 
				
			||||||
    if (absolute(sorted_input[p1]) < absolute(sorted_input[p2]))
 | 
					    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
 | 
					    else
 | 
				
			||||||
      sorted_output[output_p++] = square(sorted_input[p2++]);
 | 
					      (*sorted_output)[output_p++] = square(sorted_input[p2++]);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  while (p1 < 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())
 | 
					  while (p2 < sorted_input.size())
 | 
				
			||||||
    sorted_output[output_p++] = square(sorted_input[p2++]);
 | 
					    (*sorted_output)[output_p++] = square(sorted_input[p2++]);
 | 
				
			||||||
  return sorted_output;
 | 
					  return sorted_output;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
  std::vector<int> &result = solution(std::vector{-4, -1, 0, 3, 10});
 | 
					  std::unique_ptr<std::vector<int>> result =
 | 
				
			||||||
  for (const int num : result)
 | 
					      solution(std::vector{-4, -1, 0, 3, 10});
 | 
				
			||||||
 | 
					  for (const int num : *result)
 | 
				
			||||||
    std::cout << num << ", ";
 | 
					    std::cout << num << ", ";
 | 
				
			||||||
  std::cout << std::endl;
 | 
					  std::cout << std::endl;
 | 
				
			||||||
  delete &result;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user