Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- bool isPrime(int num)
- {
- int i;
- if (num == 2) { return 1; }
- if (num == 0 || num == 1 || num % 2 == 0) { return 0; }
- for (i = 3; i * i <= num && num % i; i += 2);
- return i * i > num;
- }
- bool notPrime(int num)
- {
- return !isPrime(num);
- }
- 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, bool incremental=false)
- {
- while (begin != end)
- {
- *begin++ = val;
- val += incremental;
- }
- }
- int* filter(int* begin, int* const end, bool(*pred)(int))
- {
- int* insertPos{ begin };
- for (; (insertPos != end) and pred(*insertPos); ++insertPos);
- if (insertPos == end) { return end; }
- begin = insertPos+1;
- while (begin != end)
- {
- if (pred(*begin))
- {
- *insertPos++ = *begin;
- }
- ++begin;
- }
- return insertPos;
- }
- int copy(int* srcB, int* srcE, int* destB, int* destE)
- {
- int copyCount{ 0 };
- while (destB != destE and srcB != srcE)
- {
- *destB++ = *srcB++;
- ++copyCount;
- }
- return copyCount;
- }
- int distance(int* begin, int* end)
- {
- return end - begin;
- }
- int* primeFiltered(int* begin, int* end, int& newSize)
- {
- auto filterPos{ filter(begin, end, notPrime)};
- newSize = distance(begin,filterPos);
- auto smallArr{ createArr(newSize) };
- copy(begin, filterPos, smallArr, smallArr + newSize);
- return smallArr;
- }
- int main()
- {
- int arr1Size{ 10 };
- auto arr1{ createArr(arr1Size) };
- fillArr(arr1, arr1 + arr1Size, 10,50);
- printArr(arr1, arr1 + arr1Size);
- int primelessSize{};
- auto primelessArr{ primeFiltered(arr1, arr1 + arr1Size, primelessSize) };
- printArr(primelessArr, primelessArr + primelessSize);
- deleteArr(primelessArr);
- deleteArr(arr1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement