Advertisement
avr39ripe

cppFilterArrByPredicate

May 18th, 2021
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. int* createArr(int size)
  4. {
  5.     return new int[size];
  6. }
  7.  
  8. void deleteArr(int* ptr)
  9. {
  10.     delete[] ptr;
  11. }
  12.  
  13. void printArr(const int* begin, const int* const end)
  14. {
  15.     while (begin != end)
  16.     {
  17.         std::cout << *begin++ << ' ';
  18.     }
  19.     std::cout << '\n';
  20. }
  21.  
  22. void fillArr(int* begin, const int* const end, int start, int stop)
  23. {
  24.     while (begin != end)
  25.     {
  26.         *begin++ = (rand() % (stop - start) + start);
  27.     }
  28. }
  29.  
  30.  
  31. void fillArr(int* begin, const int* const end, int val, bool inc = false)
  32. {
  33.  
  34.     while (begin != end)
  35.     {
  36.         *begin++ = val;
  37.         val += inc;
  38.     }
  39. }
  40.  
  41. void addElementToArr(int*& arr, int& size, int element)
  42. {
  43.     int* newArr{ new int[size + 1]{} };
  44.  
  45.     for (int i{ 0 }; i < size; ++i)
  46.     {
  47.         *(newArr + i) = *(arr + i);
  48.     }
  49.     //delete[] arr;
  50.     arr = newArr;
  51.     ++size;
  52.     *(arr + size - 1) = element;
  53. }
  54.  
  55. int* filter(int* begin, int* const end, bool(*pred)(int))
  56. {
  57.     int* insertPos{ begin };
  58.     for (; insertPos != end and pred(*insertPos); ++insertPos);
  59.     if (insertPos == end) { std::cout << "Early finish!" << '\n';  return end; }
  60.  
  61.     begin = insertPos + 1;
  62.  
  63.     while (begin != end)
  64.     {
  65.         if (pred(*begin))
  66.         {
  67.             *insertPos++ = *begin;
  68.         }
  69.         ++begin;
  70.     }
  71.  
  72.     return insertPos;
  73. }
  74.  
  75. bool allElements(int val) { return true; }
  76. bool noElements(int val) { return false; }
  77. bool evenElements(int val) { return val % 2 == 0; }
  78. bool oddElements(int val) { return val % 2 != 0; }
  79. bool greater40(int val) { return val > 40; }
  80.  
  81. int main()
  82. {
  83.     int arr1Size{ 20 };
  84.     auto arr1{ createArr(arr1Size) };
  85.     fillArr(arr1, arr1 + arr1Size, 10, 50);
  86.     printArr(arr1, arr1 + arr1Size);
  87.     auto filtered{ filter(arr1, arr1 + arr1Size, evenElements) };
  88.     printArr(arr1, filtered);
  89.  
  90.     auto filtered1{ filter(arr1, filtered, greater40) };
  91.     printArr(arr1, filtered1);
  92.  
  93.     //auto smallArr{ createArr(filtered - arr1) };
  94.  
  95.  
  96.     deleteArr(arr1);
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement