Advertisement
avr39ripe

cppDynArrFunctions

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