Advertisement
avr39-ripe

arr2dDynSBD192Practice1

Apr 18th, 2020
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.13 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. template <typename T>
  4. void printArr2d(T arr2d[][3], int ySize, int xSize)
  5. {
  6.     for (int y{ 0 }; y < ySize; ++y)
  7.     {
  8.         for (int x{ 0 }; x < xSize; ++x)
  9.         {
  10.             std::cout << arr2d[y][x] << ' ';
  11.         }
  12.         std::cout << '\n';
  13.     }
  14. }
  15.  
  16. template <typename T>
  17. void printArr2dDyn(T** arr2d, int ySize, int xSize)
  18. {
  19.     for (int y{ 0 }; y < ySize; ++y)
  20.     {
  21.         for (int x{ 0 }; x < xSize; ++x)
  22.         {
  23.             std::cout << arr2d[y][x] << '\t';
  24.         }
  25.         std::cout << '\n';
  26.     }
  27. }
  28.  
  29. template <typename T>
  30. void fillArr2dDyn(T** arr2d, int ySize, int xSize)
  31. {
  32.     for (int y{ 0 }; y < ySize; ++y)
  33.     {
  34.         for (int x{ 0 }; x < xSize; ++x)
  35.         {
  36.             arr2d[y][x] = rand()%20;
  37.         }
  38.     }
  39. }
  40.  
  41. template <typename T>
  42. void printArr(T* arr, int xSize)
  43. {
  44.     for (int x{ 0 }; x < xSize; ++x)
  45.     {
  46.         std::cout << arr[x] << '\t';
  47.     }
  48.     std::cout << '\n';
  49. }
  50.  
  51. template <typename T>
  52. void printArr2d(T** arr2d, int ySize, int xSize)
  53. {
  54.     for (int y{ 0 }; y < ySize; ++y)
  55.     {
  56.         for (int x{ 0 }; x < xSize; ++x)
  57.         {
  58.             std::cout << arr2d[y][x] << '\t';
  59.         }
  60.         std::cout << '\n';
  61.     }
  62.     std::cout << '\n';
  63. }
  64.  
  65. template <typename T>
  66. void fillArr2d(T** arr2d, int ySize, int xSize)
  67. {
  68.     for (int y{ 0 }; y < ySize; ++y)
  69.     {
  70.         for (int x{ 0 }; x < xSize; ++x)
  71.         {
  72.             arr2d[y][x] = rand() % 10;
  73.         }
  74.     }
  75. }
  76.  
  77. //template <typename T>
  78. //void deleteLastLine2dArr(T**& arr2d, int& ySize)
  79. //{
  80. //  delete[] arr2d[ySize - 1];
  81. //  T** tmp = new T* [--ySize];
  82. //  //copy(arr2d, arr2d + ySize, tmp, tmp + ySize);
  83. //  for (int y{ 0 }; y < ySize; ++y)
  84. //  {
  85. //      tmp[y] = arr2d[y];
  86. //  }
  87. //  delete[] arr2d;
  88. //  arr2d = tmp;
  89. //}
  90.  
  91.  
  92. template <typename T>
  93. void deleteLine2dArr(T**& arr2d, int& ySize, int lineIdx)
  94. {
  95.     delete[] arr2d[lineIdx];
  96.     T** tmp = new T * [--ySize];
  97.     for (int y{ 0 }; y < ySize; ++y)
  98.     {
  99.         y < lineIdx ? tmp[y] = arr2d[y] : tmp[y] = arr2d[y + 1];
  100.     }
  101.     delete[] arr2d;
  102.     arr2d = tmp;
  103. }
  104.  
  105. template <typename T>
  106. void deleteLastLine2dArr(T**& arr2d, int& ySize)
  107. {
  108.     deleteLine2dArr(arr2d, ySize, ySize - 1);
  109. }
  110.  
  111. template <typename T>
  112. void deleteFirstLine2dArr(T**& arr2d, int& ySize)
  113. {
  114.     deleteLine2dArr(arr2d, ySize, 0);
  115. }
  116.  
  117.  
  118. template <typename T>
  119. void addColArr2d(T** arr2d, int ySize, int& xSize, int colPos, T* newCol = nullptr)
  120. {
  121.     T* newRow;
  122.     for (int y{ 0 }; y < ySize; ++y)
  123.     {
  124.         newRow = new T[xSize + 1]{};
  125.         /*      colPos = 2;
  126.               1 2 3 4 5
  127.               1 2 0 3 4 5*/
  128.         for (int x{ 0 }; x < xSize; ++x)
  129.         {
  130.             newRow[x + (x < colPos ? 0 : 1)] = arr2d[y][x];
  131.         }
  132.         if (newCol) { newRow[colPos] = newCol[y]; };
  133.         delete[] arr2d[y];
  134.         arr2d[y] = newRow;
  135.     }
  136.     ++xSize;
  137. }
  138.  
  139. template <typename T>
  140. void sliceArr2d(T** arr2d, int ySize, int xSize, T* bigArr)
  141. {
  142.     for (int y{ 0 }; y < ySize; ++y)
  143.     {
  144.         arr2d[y] = bigArr + y * xSize;
  145.     }
  146. }
  147.  
  148. template <typename T>
  149. T** createArr2dLinear(int ySize, int xSize)
  150. {
  151.     T** arr2d{ new T * [ySize] };
  152.     T* bigArr{ new T[ySize * xSize] {} };
  153.     sliceArr2d(arr2d, ySize, xSize, bigArr);
  154.     return arr2d;
  155. }
  156.  
  157. template <typename T>
  158. void deleteArr2dLinear(T** arr2d)
  159. {
  160.     delete[] arr2d[0];
  161.     delete[] arr2d;
  162. }
  163.  
  164. template <typename T>
  165. void addColArr2dLinear(T** arr2d, int ySize, int& xSize, int colPos, T* newCol = nullptr)
  166. {
  167.     T* newBigArr{ new int[ySize * (xSize + 1)]{} };
  168.  
  169.     for (int y{ 0 }; y < ySize; ++y)
  170.     {
  171.         for (int x{ 0 }; x < xSize; ++x)
  172.         {
  173.             newBigArr[y * (xSize + 1) + x + (x < colPos ? 0 : 1)] = arr2d[y][x];
  174.         }
  175.         if (newCol)
  176.         {
  177.             newBigArr[y * (xSize + 1) + colPos] = newCol[y];
  178.         }
  179.     }
  180.  
  181.     xSize++;
  182.     delete[] arr2d[0];
  183.     sliceArr2d(arr2d, ySize, xSize, newBigArr);
  184. }
  185.  
  186. int main()
  187. {
  188.     int ySize{ 3 };
  189.     int xSize{ 5 };
  190.  
  191.     //int** arr2d{ new int* [ySize] };
  192.  
  193.     //for (int y{ 0 }; y < ySize; ++y)
  194.     //{
  195.     //    arr2d[y] = new int[xSize] {1,2,3,4,5};
  196.     //}
  197.     int** arr2d = createArr2dLinear<int>(ySize, xSize);
  198.  
  199.     printArr2d(arr2d, ySize, xSize);
  200.     fillArr2d(arr2d, ySize, xSize);
  201.     printArr2d(arr2d, ySize, xSize);
  202.     int colPos{ 2 };
  203.     int* newCol{ new int[ySize] { 11,12,13 } };
  204.     addColArr2dLinear(arr2d, ySize, xSize, colPos);
  205.     printArr2d(arr2d, ySize, xSize);
  206.  
  207.     deleteArr2dLinear(arr2d);
  208.     //for (int y{ 0 }; y < ySize; ++y)
  209.     //{
  210.     //    delete[] arr2d[y];
  211.     //}
  212.     //delete[] arr2d;
  213.     delete[] newCol;
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement