Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- template <typename T>
- void forEach(T* arrB, T* arrE, void(*action)(T& el))
- {
- while (arrB != arrE)
- {
- if (action) { action(*arrB++); };
- }
- }
- void printElement(int& el)
- {
- std::cout << el << ' ';
- };
- template <typename T>
- int copy_if(T* srcB, T* srcE, T* destB, T* destE, bool(*pred)(T& elem))
- {
- int copyCount{ 0 };
- while (destB != destE and srcB != srcE)
- {
- if (pred(*srcB))
- {
- *destB++ = *srcB;
- ++copyCount;
- }
- ++srcB;
- }
- return copyCount;
- }
- bool trueer(int& el)
- {
- return true;
- }
- bool falseer(int& el)
- {
- return false;
- }
- bool evener(int& el)
- {
- return !(el % 2);
- }
- bool odder(int& el)
- {
- return (el % 2);
- }
- bool greater5(int& el)
- {
- return el > 5;
- }
- int main()
- {
- const int size{ 10 };
- int arr[size]{ 1,2,3,4,5,6,7,8,9,10 };
- int* arrBegin{ arr };
- int* arrEnd{ arr + size };
- const int size1{ 3 };
- int arr1[size1]{};
- int* arr1Begin{ arr1 };
- int* arr1End{ arr1 + size1 };
- int copyCount{ 0 };
- forEach(arrBegin, arrEnd, printElement);
- std::cout << '\n';
- forEach(arr1Begin, arr1End, printElement);
- std::cout << '\n';
- copyCount = copy_if(arrBegin, arrEnd, arr1Begin, arr1End, greater5);
- forEach(arr1Begin, arr1End, printElement);
- std::cout << '\n' << copyCount << " elements copied\n";
- std::cout << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement