Advertisement
avr39ripe

cppDynArrRemovePrimesFromArr

May 18th, 2021
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. bool isPrime(int num)
  4. {
  5.     int i;
  6.     if (num == 2) { return 1; }
  7.     if (num == 0 || num == 1 || num % 2 == 0) { return 0; }
  8.     for (i = 3; i * i <= num && num % i; i += 2);
  9.  
  10.     return i * i > num;
  11. }
  12.  
  13. bool notPrime(int num)
  14. {
  15.     return !isPrime(num);
  16. }
  17.  
  18. int* createArr(int size)
  19. {
  20.     return new int[size];
  21. }
  22.  
  23. void deleteArr(int* ptr)
  24. {
  25.     delete[] ptr;
  26. }
  27.  
  28. void printArr(const int* begin, const int* const end)
  29. {
  30.     while (begin != end)
  31.     {
  32.         std::cout << *begin++ << ' ';
  33.     }
  34.     std::cout << '\n';
  35. }
  36.  
  37. void fillArr(int* begin, const int* const end, int start, int stop)
  38. {
  39.     while (begin != end)
  40.     {
  41.         *begin++ = (rand() % (stop - start) + start);
  42.     }
  43. }
  44.  
  45. void fillArr(int* begin, const int* const end, int val, bool incremental=false)
  46. {
  47.     while (begin != end)
  48.     {
  49.         *begin++ = val;
  50.         val += incremental;
  51.     }
  52. }
  53.  
  54. int* filter(int* begin, int* const end, bool(*pred)(int))
  55. {
  56.     int* insertPos{ begin };
  57.     for (; (insertPos != end) and pred(*insertPos); ++insertPos);
  58.     if (insertPos == end) { return end; }
  59.  
  60.     begin = insertPos+1;
  61.     while (begin != end)
  62.     {
  63.         if (pred(*begin))
  64.         {
  65.             *insertPos++ = *begin;
  66.         }
  67.         ++begin;
  68.     }
  69.     return insertPos;
  70.  
  71. }
  72.  
  73. int copy(int* srcB, int* srcE, int* destB, int* destE)
  74. {
  75.     int copyCount{ 0 };
  76.     while (destB != destE and srcB != srcE)
  77.     {
  78.         *destB++ = *srcB++;
  79.         ++copyCount;
  80.     }
  81.     return copyCount;
  82. }
  83.  
  84. int distance(int* begin, int* end)
  85. {
  86.     return end - begin;
  87. }
  88.  
  89. int* primeFiltered(int* begin, int* end, int& newSize)
  90. {
  91.     auto filterPos{ filter(begin, end, notPrime)};
  92.  
  93.     newSize = distance(begin,filterPos);
  94.     auto smallArr{ createArr(newSize) };
  95.     copy(begin, filterPos, smallArr, smallArr + newSize);
  96.    
  97.     return smallArr;
  98. }
  99.  
  100. int main()
  101. {
  102.     int arr1Size{ 10 };
  103.     auto arr1{ createArr(arr1Size) };
  104.     fillArr(arr1, arr1 + arr1Size, 10,50);
  105.     printArr(arr1, arr1 + arr1Size);
  106.  
  107.     int primelessSize{};
  108.     auto primelessArr{ primeFiltered(arr1, arr1 + arr1Size, primelessSize) };
  109.     printArr(primelessArr, primelessArr + primelessSize);
  110.     deleteArr(primelessArr);
  111.  
  112.     deleteArr(arr1);
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement