Advertisement
avr39-ripe

WIP_uniqueArrinplace

Apr 2nd, 2020
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <functional>
  3. #include <algorithm>
  4.  
  5. template <typename T> bool sortUp(T a, T b)
  6. {
  7.     return a < b;
  8. }
  9.  
  10. template <typename T> bool sortDown(T a, T b)
  11. {
  12.     return a > b;
  13. }
  14.  
  15. template <typename T> void arrPrint(T* arr, int arrSize)
  16. {
  17.     for (int i = 0; i < arrSize; i++) { std::cout << arr[i] << " "; }; std::cout << '\n';
  18. }
  19.  
  20. template <typename T> void sortArr(T* arr, int arrSize, std::function<int(T, T)> sortCrit, std::function<void(T*, int)> print=nullptr)
  21. {
  22.     if (print) print(arr, arrSize);
  23.     for (int head {0}; head < arrSize; ++head)
  24.     {
  25.         for (int tail {arrSize - 1}; tail > head; --tail)
  26.         {
  27.  
  28.             if (sortCrit(arr[tail],arr[head]))
  29.             {
  30.                 T tmp {arr[tail]};
  31.                 arr[tail] = arr[head];
  32.                 arr[head] = tmp;
  33.  
  34.                 if (print) print(arr, arrSize);
  35.             }
  36.         }
  37.  
  38.     }
  39.     if (print) print(arr, arrSize);
  40. }
  41.  
  42. template <typename T>
  43. void printArr(T* begin, T* end)
  44. {
  45.     while (begin != end)
  46.     {
  47.         std::cout << *begin++ << ' ';
  48.     }
  49.     std::cout << '\n';
  50. }
  51.  
  52. std::unique();
  53.  
  54. template <typename T>
  55. T* unique(T* begin, T* end)
  56. {
  57.     long size{end - begin};
  58.     long count{1};
  59.     T* cBegin{begin};
  60.     ++begin;
  61.     T* free{begin};
  62.     T* last{begin-1};
  63.     T* next{nullptr};
  64.     while ((begin != end) and (count < size))
  65.     {
  66.         if ((*begin == *last) and (*free != *begin))
  67.         {
  68.             free = begin;
  69.         }
  70.         if(*begin != *last)
  71.         {
  72.             last = begin;
  73.             *free++ = *begin;
  74.             printArr(cBegin,end);
  75.         }
  76.         ++begin;
  77.  
  78.     }
  79.     return end;
  80. }
  81. int main()
  82. {
  83.     const int arrSize{15};
  84.     int arr[arrSize]{1,1,1,2,2,2,3,3,4,5,6,7,8,8,9};
  85.     unique(arr, arr+arrSize);
  86.  
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement