Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <functional>
- int* createArr(int size)
- {
- return new int[size] {};
- }
- void deleteArr(int* ptr)
- {
- delete[] ptr;
- }
- void printArr(const int* begin, const int* const end)
- {
- while (begin != end)
- {
- std::cout << *begin++ << ' ';
- }
- std::cout << '\n';
- }
- void fillArr(int* begin, const int* const end, int start, int stop)
- {
- while (begin != end)
- {
- *begin++ = (rand() % (stop - start) + start);
- }
- }
- void fillArr(int* begin, const int* const end, int val)
- {
- while (begin != end)
- {
- *begin++ = val;
- }
- }
- void fillArr(int* begin, const int* const end)
- {
- int val{ 1 };
- while (begin != end)
- {
- *begin++ = val++;
- }
- }
- void printMsg()
- {
- std::cout << "Hello, world!\n";
- }
- void countDown()
- {
- for (int i{ 5 }; i >= 0; --i)
- {
- std::cout << i << '\n';
- }
- std::cout << "Booom!\n";
- }
- int max(int a, int b)
- {
- return a > b ? a : b;
- }
- int min(int a, int b)
- {
- return a < b ? a : b;
- }
- float func(bool f, int n, char s);
- bool sortUp(int a, int b) { return a < b; };
- bool sortDown(int a, int b) { return a > b; };
- bool sortEvenFirst(int a, int b) { return (a % 2 == 0) and (b % 2 != 0); }
- bool sortOddFirst(int a, int b) { return (a % 2 != 0) and (b % 2 == 0); }
- //void sort(int* arr, int arrSize, int sortCrit = 1)
- //{
- // int tmp;
- // for (int head{ 0 }; head < arrSize; ++head)
- // {
- // for (int tail{ arrSize - 1 }; tail > head; --tail)
- // {
- // if (sortCrit == 1)
- // {
- // if (sortUp(arr[tail], arr[tail - 1]))
- // {
- // tmp = arr[tail];
- // arr[tail] = arr[tail - 1];
- // arr[tail - 1] = tmp;
- // }
- // }
- // else if (sortCrit == 0)
- // {
- // if (sortDown(arr[tail], arr[tail - 1]))
- // {
- // tmp = arr[tail];
- // arr[tail] = arr[tail - 1];
- // arr[tail - 1] = tmp;
- // }
- // }
- // else if (sortCrit == 3)
- // {
- // if (sortEvenFirst(arr[tail], arr[tail - 1]))
- // {
- // tmp = arr[tail];
- // arr[tail] = arr[tail - 1];
- // arr[tail - 1] = tmp;
- // }
- // }
- // /*if (arr[tail] < arr[tail - 1])
- // {
- // tmp = arr[tail];
- // arr[tail] = arr[tail - 1];
- // arr[tail - 1] = tmp;
- // }*/
- // }
- // }
- //}
- void sort(int* arr, int arrSize, int sortCrit = 1)
- {
- int tmp;
- for (int head{ 0 }; head < arrSize; ++head)
- {
- for (int tail{ arrSize - 1 }; tail > head; --tail)
- {
- if ((sortCrit == 1 and sortUp(arr[tail], arr[tail - 1])) or (sortCrit == 0 and sortDown(arr[tail], arr[tail - 1])) or (sortCrit == 3 and sortEvenFirst(arr[tail], arr[tail - 1])))
- {
- tmp = arr[tail];
- arr[tail] = arr[tail - 1];
- arr[tail - 1] = tmp;
- }
- }
- }
- }
- void sort(int* arr, int arrSize, std::function<bool(int,int)> sortCrit)
- {
- int tmp;
- for (int head{ 0 }; head < arrSize; ++head)
- {
- for (int tail{ arrSize - 1 }; tail > head; --tail)
- {
- if (sortCrit(arr[tail], arr[tail - 1]))
- {
- tmp = arr[tail];
- arr[tail] = arr[tail - 1];
- arr[tail - 1] = tmp;
- }
- }
- }
- }
- void forEach(int* begin, const int* const end, std::function<void(int&)>action)
- {
- while (begin != end)
- {
- //std::cout << *begin++ << ' ';
- action(*begin++);
- }
- std::cout << '\n';
- }
- void printHAction(int& elem)
- {
- std::cout << elem << ' ';
- }
- void printVAction(int& elem)
- {
- std::cout << elem << '\n';
- }
- void randomAction(int& elem)
- {
- elem = rand() % 10;
- }
- int main()
- {
- const int arrSize{ 10 };
- int arr[arrSize]{ 6,1,4,2,8,9,11,3,2,1 };
- forEach(arr, arr + arrSize, printHAction);
- //printArr(arr, arr + arrSize);
- //sort(arr, arrSize,0);
- sort(arr, arrSize, sortOddFirst);
- //printArr(arr, arr + arrSize);
- forEach(arr, arr + arrSize, printVAction);
- /*printMsg();
- std::cout << "Address of printMsg: " << printMsg << '\n';
- float(*funcPointer)(bool, int, char) {nullptr};
- void* vPtr{ printMsg };
- std::function<void()>vPtr();
- std::function<void()> newFPtr{ printMsg };
- std::function<int(int, int)> newFPtr1{ max };
- std::function<float(bool, int, char)> newFPtr2{ func };
- void* ptr{ min };
- auto funcPtr{ printMsg };
- void(*ptrF1)() {printMsg};
- int(*ptrF2)(int, int) { max };
- ptrF1();
- ptrF1 = countDown;
- if (ptrF1)
- {
- ptrF1();
- }
- else
- {
- std::cout << "Nobody lives here :(\n";
- }*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement