Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <functional>
- #include <algorithm>
- template <typename T> bool sortUp(T a, T b)
- {
- return a < b;
- }
- template <typename T> bool sortDown(T a, T b)
- {
- return a > b;
- }
- template <typename T> void arrPrint(T* arr, int arrSize)
- {
- for (int i = 0; i < arrSize; i++) { std::cout << arr[i] << " "; }; std::cout << '\n';
- }
- template <typename T> void sortArr(T* arr, int arrSize, std::function<int(T, T)> sortCrit, std::function<void(T*, int)> print=nullptr)
- {
- if (print) print(arr, arrSize);
- for (int head {0}; head < arrSize; ++head)
- {
- for (int tail {arrSize - 1}; tail > head; --tail)
- {
- if (sortCrit(arr[tail],arr[head]))
- {
- T tmp {arr[tail]};
- arr[tail] = arr[head];
- arr[head] = tmp;
- if (print) print(arr, arrSize);
- }
- }
- }
- if (print) print(arr, arrSize);
- }
- template <typename T>
- void printArr(T* begin, T* end)
- {
- while (begin != end)
- {
- std::cout << *begin++ << ' ';
- }
- std::cout << '\n';
- }
- std::unique();
- template <typename T>
- T* unique(T* begin, T* end)
- {
- long size{end - begin};
- long count{1};
- T* cBegin{begin};
- ++begin;
- T* free{begin};
- T* last{begin-1};
- T* next{nullptr};
- while ((begin != end) and (count < size))
- {
- if ((*begin == *last) and (*free != *begin))
- {
- free = begin;
- }
- if(*begin != *last)
- {
- last = begin;
- *free++ = *begin;
- printArr(cBegin,end);
- }
- ++begin;
- }
- return end;
- }
- int main()
- {
- const int arrSize{15};
- int arr[arrSize]{1,1,1,2,2,2,3,3,4,5,6,7,8,8,9};
- unique(arr, arr+arrSize);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement