Advertisement
avr39ripe

cppFPointersBasic

May 11th, 2021
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <functional>
  3.  
  4. int* createArr(int size)
  5. {
  6.     return new int[size] {};
  7. }
  8.  
  9. void deleteArr(int* ptr)
  10. {
  11.     delete[] ptr;
  12. }
  13.  
  14. void printArr(const int* begin, const int* const end)
  15. {
  16.     while (begin != end)
  17.     {
  18.         std::cout << *begin++ << ' ';
  19.     }
  20.     std::cout << '\n';
  21. }
  22.  
  23. void fillArr(int* begin, const int* const end, int start, int stop)
  24. {
  25.     while (begin != end)
  26.     {
  27.         *begin++ = (rand() % (stop - start) + start);
  28.     }
  29. }
  30.  
  31.  
  32. void fillArr(int* begin, const int* const end, int val)
  33. {
  34.     while (begin != end)
  35.     {
  36.         *begin++ = val;
  37.     }
  38. }
  39.  
  40. void fillArr(int* begin, const int* const end)
  41. {
  42.     int val{ 1 };
  43.     while (begin != end)
  44.     {
  45.         *begin++ = val++;
  46.     }
  47. }
  48.  
  49. void printMsg()
  50. {
  51.     std::cout << "Hello, world!\n";
  52. }
  53.  
  54. void countDown()
  55. {
  56.     for (int i{ 5 }; i >= 0; --i)
  57.     {
  58.         std::cout << i << '\n';
  59.     }
  60.     std::cout << "Booom!\n";
  61. }
  62.  
  63. int max(int a, int b)
  64. {
  65.     return a > b ? a : b;
  66. }
  67.  
  68. int min(int a, int b)
  69. {
  70.     return a < b ? a : b;
  71. }
  72.  
  73. float func(bool f, int n, char s);
  74.  
  75. bool sortUp(int a, int b) { return a < b; };
  76. bool sortDown(int a, int b) { return a > b; };
  77. bool sortEvenFirst(int a, int b) { return (a % 2 == 0) and (b % 2 != 0); }
  78. bool sortOddFirst(int a, int b) { return (a % 2 != 0) and (b % 2 == 0); }
  79. //void sort(int* arr, int arrSize, int sortCrit = 1)
  80. //{
  81. //  int tmp;
  82. //  for (int head{ 0 }; head < arrSize; ++head)
  83. //  {
  84. //      for (int tail{ arrSize - 1 }; tail > head; --tail)
  85. //      {
  86. //          if (sortCrit == 1)
  87. //          {
  88. //              if (sortUp(arr[tail], arr[tail - 1]))
  89. //              {
  90. //                  tmp = arr[tail];
  91. //                  arr[tail] = arr[tail - 1];
  92. //                  arr[tail - 1] = tmp;
  93. //              }
  94. //          }
  95. //          else if (sortCrit == 0)
  96. //          {
  97. //              if (sortDown(arr[tail], arr[tail - 1]))
  98. //              {
  99. //                  tmp = arr[tail];
  100. //                  arr[tail] = arr[tail - 1];
  101. //                  arr[tail - 1] = tmp;
  102. //              }
  103. //          }
  104. //          else if (sortCrit == 3)
  105. //          {
  106. //              if (sortEvenFirst(arr[tail], arr[tail - 1]))
  107. //              {
  108. //                  tmp = arr[tail];
  109. //                  arr[tail] = arr[tail - 1];
  110. //                  arr[tail - 1] = tmp;
  111. //              }
  112. //          }
  113. //          /*if (arr[tail] < arr[tail - 1])
  114. //          {
  115. //              tmp = arr[tail];
  116. //              arr[tail] = arr[tail - 1];
  117. //              arr[tail - 1] = tmp;
  118. //          }*/
  119. //      }
  120. //  }
  121. //}
  122.  
  123. void sort(int* arr, int arrSize, int sortCrit = 1)
  124. {
  125.     int tmp;
  126.     for (int head{ 0 }; head < arrSize; ++head)
  127.     {
  128.         for (int tail{ arrSize - 1 }; tail > head; --tail)
  129.         {
  130.             if ((sortCrit == 1 and sortUp(arr[tail], arr[tail - 1])) or (sortCrit == 0 and sortDown(arr[tail], arr[tail - 1])) or (sortCrit == 3 and sortEvenFirst(arr[tail], arr[tail - 1])))
  131.             {
  132.                 tmp = arr[tail];
  133.                 arr[tail] = arr[tail - 1];
  134.                 arr[tail - 1] = tmp;
  135.             }
  136.         }
  137.     }
  138. }
  139.  
  140. void sort(int* arr, int arrSize, std::function<bool(int,int)> sortCrit)
  141. {
  142.     int tmp;
  143.     for (int head{ 0 }; head < arrSize; ++head)
  144.     {
  145.         for (int tail{ arrSize - 1 }; tail > head; --tail)
  146.         {
  147.             if (sortCrit(arr[tail], arr[tail - 1]))
  148.             {
  149.                 tmp = arr[tail];
  150.                 arr[tail] = arr[tail - 1];
  151.                 arr[tail - 1] = tmp;
  152.             }
  153.         }
  154.     }
  155. }
  156.  
  157.  
  158.  
  159. void forEach(int* begin, const int* const end, std::function<void(int&)>action)
  160. {
  161.     while (begin != end)
  162.     {
  163.         //std::cout << *begin++ << ' ';
  164.         action(*begin++);
  165.     }
  166.     std::cout << '\n';
  167. }
  168.  
  169.  
  170. void printHAction(int& elem)
  171. {
  172.     std::cout << elem << ' ';
  173. }
  174.  
  175. void printVAction(int& elem)
  176. {
  177.     std::cout << elem << '\n';
  178. }
  179.  
  180. void randomAction(int& elem)
  181. {
  182.     elem = rand() % 10;
  183. }
  184.  
  185. int main()
  186. {
  187.     const int arrSize{ 10 };
  188.     int arr[arrSize]{ 6,1,4,2,8,9,11,3,2,1 };
  189.  
  190.     forEach(arr, arr + arrSize, printHAction);
  191.     //printArr(arr, arr + arrSize);
  192.     //sort(arr, arrSize,0);
  193.     sort(arr, arrSize, sortOddFirst);
  194.     //printArr(arr, arr + arrSize);
  195.     forEach(arr, arr + arrSize, printVAction);
  196.  
  197.  
  198.     /*printMsg();
  199.     std::cout << "Address of printMsg: " << printMsg << '\n';
  200.  
  201.     float(*funcPointer)(bool, int, char) {nullptr};
  202.  
  203.     void* vPtr{ printMsg };
  204.  
  205.     std::function<void()>vPtr();
  206.  
  207.     std::function<void()> newFPtr{ printMsg };
  208.     std::function<int(int, int)> newFPtr1{ max };
  209.     std::function<float(bool, int, char)> newFPtr2{ func };
  210.  
  211.     void* ptr{ min };
  212.     auto funcPtr{ printMsg };
  213.  
  214.     void(*ptrF1)() {printMsg};
  215.     int(*ptrF2)(int, int) { max };
  216.  
  217.     ptrF1();
  218.     ptrF1 = countDown;
  219.    
  220.     if (ptrF1)
  221.     {
  222.         ptrF1();
  223.     }
  224.     else
  225.     {
  226.         std::cout << "Nobody lives here :(\n";
  227.     }*/
  228.  
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement