Advertisement
avr39-ripe

copyIfSolution

Apr 6th, 2020
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. #include <iostream>
  2.  
  3.  
  4. //int strlenM(const char* str)
  5. //{
  6. //    int len{ 0 };
  7. //    for (; *str++; ++len);
  8. //    return len;
  9. //}
  10.  
  11. template <typename T>
  12. void forEach(T* arrB, T* arrE, void(*action)(T& el))
  13. {
  14.     while (arrB != arrE)
  15.     {
  16.         if (action) { action(*arrB++); };
  17.     }
  18. }
  19.  
  20.  
  21. void printElement(int& el)
  22. {
  23.     std::cout << el << ' ';
  24. };
  25.  
  26.  
  27. template <typename T>
  28. bool trueer(const T& el) { return true; }
  29. template <typename T>
  30. bool falseer(const T& el) { return false; }
  31.  
  32. template <typename T>
  33. bool evener(const T& el){ return !(el % 2);}
  34. template <typename T>
  35. bool odder(const T& el){ return (el % 2); }
  36.  
  37. template <typename T>
  38. int copy_if(T* srcB, T* srcE, T* destB, T* destE, bool(*pred)(const T& el))
  39. {
  40.     int copyCount{ 0 };
  41.  
  42.     while (srcB != srcE and destB != destE)
  43.     {
  44.         if (pred(*srcB))
  45.         {
  46.            *destB++ = *srcB;
  47.             ++copyCount;
  48.         }
  49.         ++srcB;
  50.     }
  51.     return copyCount;
  52. }
  53.  
  54. //void printArr(int* ptr, int size)
  55. //{
  56. //    for (auto elP{ ptr }; elP != (ptr + size); ++elP)
  57. //    {
  58. //        std::cout << *elP << ' ';
  59. //    }
  60. //    std::cout << '\n';
  61. //}
  62.  
  63. //template <typename T>
  64. //int copy_if(T* srcB, T* srcE, T* destB, T* destE, bool(*pred)(const T& el))
  65. //{
  66. //    int count{ 0 };
  67. //    for (auto elP{ srcB }; (elP != srcE) && (destB + count != destE); ++elP)
  68. //    {
  69. //        const int& elm{ *elP };
  70. //        if (pred(elm))
  71. //        {
  72. //            *(destB + count) = *elP;
  73. //            ++count;
  74. //        }
  75. //    }
  76. //    return count;
  77. //}
  78.  
  79. int main()
  80. {
  81.     const int arrSize{ 10 };
  82.     int arr[arrSize]{ 1,2,3,4,5,6,7,8,9,10 };
  83.  
  84.     int* arrBegin{ arr };
  85.     int* arrEnd{ arr + arrSize };
  86.  
  87.     const int arr1Size{ 10 };
  88.     int arr1[arr1Size]{};
  89.  
  90.     int* arr1Begin{ arr1 };
  91.     int* arr1End{ arr1 + arr1Size };
  92.  
  93.     forEach(arrBegin, arrEnd, printElement);
  94.     std::cout << '\n';
  95.     forEach(arr1Begin, arr1End, printElement);
  96.     std::cout << '\n';
  97.     int copyCount = copy_if(arrBegin+2, arrEnd-2, arr1Begin+2, arr1End-2, evener);
  98.     forEach(arr1Begin, arr1End, printElement);
  99.     std::cout << '\n' << copyCount << " elements copied\n";
  100.     std::cout << '\n';
  101.     //copyCount = copy_if(arrBegin, arrEnd, arr1Begin, arr1End, odder);
  102.     //forEach(arr1Begin, arr1End, printElement);
  103.     //std::cout << '\n' << copyCount << " elements copied\n";
  104.     //std::cout << '\n';
  105.  
  106.     ////char str[15]{ 'H','e','0','o','!','\0'};
  107.     //int strSize{ 15 };
  108.     //char* string{ new char[strSize] };
  109.     //char str[20]{ "Hello, world!" };
  110.     //int arr[5]{ 1,2,3,4,5 };
  111.  
  112.     //std::cout << str << ' ' << strlenM(str) << '\n';
  113.     //std::cout << str << ' ' << strlenM(str) << '\n';
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement