avr39ripe

arr2dDyn

Jun 15th, 2021 (edited)
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.25 KB | None | 0 0
  1. // https://pastebin.com/BEQWTjw0 - linear version
  2. #include <iostream>
  3.  
  4. template <typename T>
  5. void printArr(T* arr, int arrSize)
  6. {
  7.     for (int i{ 0 }; i < arrSize; ++i)
  8.     {
  9.         std::cout << arr[i] << '\t';
  10.     }
  11.     std::cout << '\n';
  12. }
  13.  
  14. template <typename T>
  15. void printArr(T** container, int ySize, int xSize)
  16. {
  17.     for (int y{ 0 }; y < ySize; ++y)
  18.     {
  19.         printArr(container[y], xSize);
  20.     }
  21.     std::cout << '\n';
  22. }
  23.  
  24. template <typename T>
  25. void fillArr(T** container, int ySize, int xSize)
  26. {
  27.     int cnt{ 1 };
  28.     for (int y{ 0 }; y < ySize; ++y)
  29.     {
  30.         for (int x{ 0 }; x < xSize; ++x)
  31.         {
  32.             container[y][x] = cnt++;
  33.         }
  34.     }
  35. }
  36.  
  37. template <typename T>
  38. T** createArr2D(int ySize, int xSize)
  39. {
  40.     T** container{ new T * [ySize] };
  41.  
  42.     for (int y{ 0 }; y < ySize; ++y)
  43.     {
  44.         *(container + y) = new T[xSize];
  45.     }
  46.     return container;
  47. }
  48.  
  49. template <typename T>
  50. void deleteArr2D(T** container, int ySize)
  51. {
  52.     for (int y{ 0 }; y < ySize; ++y)
  53.     {
  54.         delete[] *(container + y);
  55.     }
  56.     delete[] container;
  57. }
  58.  
  59. template <typename T>
  60. void deleteColumnArr2D(T** container, int ySize, int& xSize, int columnPos)
  61. {
  62.     --xSize;
  63.     T* oldRow;
  64.     for (int y{ 0 }; y < ySize; ++y)
  65.     {
  66.         oldRow = *(container + y);
  67.         *(container + y) = new T[xSize];
  68.  
  69.         for (int x{ 0 }; x < xSize; ++x)
  70.         {
  71.             *(*(container + y) + x) = *(oldRow + x + (x >= columnPos));
  72.         }
  73.         delete[] oldRow;
  74.     }
  75. }
  76.  
  77. template <typename T>
  78. void addColumnArr2D(T** container, int ySize, int& xSize, int columnPos, T* newCol = nullptr)
  79. {
  80.     T* oldRow;
  81.     for (int y{ 0 }; y < ySize; ++y)
  82.     {
  83.         oldRow = *(container + y);
  84.         *(container + y) = new T[xSize + 1];
  85.  
  86.         for (int x{ 0 }; x < xSize; ++x)
  87.         {
  88.             *(*(container + y) + x + (x >= columnPos)) = *(oldRow + x);
  89.         }
  90.  
  91.         *(*(container + y ) + columnPos) = newCol ? *(newCol + y) : 0;
  92.         delete[] oldRow;
  93.     }
  94.     ++xSize;
  95. }
  96.  
  97. template <typename T>
  98. void deleteRowArr2D(T**& container, int& ySize, int xSize, int rowPos)
  99. {
  100.     --ySize;
  101.     T** newContainer{ new T * [ySize] };
  102.  
  103.     for (int y{ 0 }; y < ySize; ++y)
  104.     {
  105.         *(newContainer + y) = *(container + y + (y >= rowPos));
  106.     }
  107.  
  108.     delete[] *(container + rowPos);
  109.     delete[] container;
  110.     container = newContainer;
  111. }
  112.  
  113. template <typename T>
  114. void addRowArr2D(T**& container, int& ySize, int xSize, int rowPos, T* newRow = nullptr)
  115. {
  116.     T** newContainer{ new T*[ySize + 1] };
  117.     for (int y{ 0 }; y < ySize; ++y)
  118.     {
  119.         *(newContainer + y + (y >= rowPos)) = *(container + y);
  120.     }
  121.  
  122.     *(newContainer + rowPos) = new T[xSize];
  123.  
  124.     for (int x{ 0 }; x < xSize; ++x)
  125.     {
  126.         *(*(newContainer + rowPos) + x) = newRow ? *(newRow + x) : 0;
  127.     }
  128.  
  129.     ++ySize;
  130.     delete[] container;
  131.     container = newContainer;
  132. }
  133.  
  134. int main()
  135. {
  136.     int ySize{ 3 };
  137.     int xSize{ 3 };
  138.     auto arr2D{ createArr2D<int>(ySize,xSize) };
  139.  
  140.     fillArr(arr2D, xSize, ySize);
  141.     printArr(arr2D, ySize, xSize);
  142.  
  143.     deleteColumnArr2D(arr2D, ySize, xSize, 2);
  144.     printArr(arr2D, ySize, xSize);
  145.  
  146.     auto newCol{ new int[ySize] {1,2,3} };
  147.     addColumnArr2D(arr2D, ySize, xSize, 0, newCol);
  148.     printArr(arr2D, ySize, xSize);
  149.  
  150.     deleteRowArr2D(arr2D, ySize, xSize, 2);
  151.     printArr(arr2D, ySize, xSize);
  152.  
  153.     auto newRow{ new int[xSize] {1,2,3} };
  154.     addRowArr2D(arr2D, ySize, xSize, 2, newRow);
  155.     printArr(arr2D, ySize, xSize);
  156.  
  157.     deleteArr2D(arr2D, ySize);
  158.  
  159.     delete[] newCol;
  160.     delete[] newRow;
  161.  
  162.     return 0;
  163. }
Add Comment
Please, Sign In to add comment