当前位置:   article > 正文

OOP矩阵的右旋(类拷贝构造与析构)

OOP矩阵的右旋(类拷贝构造与析构)

题目描述

定义一个矩阵类,其中包含了矩阵的维数,矩阵,以及需要的方法 

为该矩阵类定义一个拷贝构造函数,复制另一个矩阵对象的矩阵。

对复制矩阵类对象的矩阵进行右旋操作。

比如现在有2*3矩阵 :

1 2 3

4 5 6 

向右旋转90度后的矩阵变为:

4 1

5 2

6 3

要求:矩阵类内的矩阵需要使用new方法,动态生成,并且在调用结束后使用析构函数释放空间。

输入

 第一行输入t表示有t个测试实例

连续m行,输入矩阵维数m和n,然后输入一个m*n的矩阵的数据

依次输入t个实例

输出

 依次输出右转前后的矩阵

在输出的每行中,每个数据之间都用空格隔开

//

输入示例

2
2 3
1 2 3
4 5 6
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

输出示例

before:
1 2 3
4 5 6
after:
4 1
5 2
6 3

before:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
after:
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4

AC代码:

  1. #include <iostream>
  2. using namespace std;
  3. class Matrix
  4. {
  5. private:
  6. int rows;
  7. int cols;
  8. int **data;
  9. public:
  10. Matrix(int m, int n) : rows(m), cols(n)
  11. {
  12. data = new int *[rows];
  13. for (int i = 0; i < rows; ++i)
  14. {
  15. data[i] = new int[cols];
  16. }
  17. }
  18. Matrix(const Matrix &matrix) : rows(matrix.rows), cols(matrix.cols)
  19. {
  20. data = new int *[rows];
  21. for (int i = 0; i < rows; ++i)
  22. {
  23. data[i] = new int[cols];
  24. for (int j = 0; j < cols; ++j)
  25. {
  26. data[i][j] = matrix.data[i][j];
  27. }
  28. }
  29. }
  30. ~Matrix()
  31. {
  32. for (int i = 0; i < rows; ++i)
  33. {
  34. delete[] data[i];
  35. }
  36. delete[] data;
  37. }
  38. void rotate(int **shuzu)
  39. {
  40. int **rotatedData = new int *[cols];
  41. for (int i = 0; i < cols; ++i)
  42. {
  43. rotatedData[i] = new int[rows];
  44. }
  45. for (int i = 0; i < cols; ++i)
  46. {
  47. for (int j = 0; j < rows; ++j)
  48. {
  49. rotatedData[i][j] = shuzu[rows - j - 1][i];
  50. }
  51. }
  52. for (int i = 0; i < rows; ++i)
  53. {
  54. delete[] data[i];
  55. }
  56. delete[] data;
  57. data = rotatedData;
  58. swap(rows, cols);
  59. }
  60. void setData(int row, int col, int value)
  61. {
  62. data[row][col] = value;
  63. }
  64. void print()
  65. {
  66. for (int i = 0; i < rows; ++i)
  67. {
  68. for (int j = 0; j < cols - 1; ++j)
  69. {
  70. cout << data[i][j] << " ";
  71. }
  72. cout << data[i][cols - 1];
  73. cout << endl;
  74. }
  75. }
  76. int **geta()
  77. {
  78. return data;
  79. }
  80. };
  81. int main()
  82. {
  83. int t;
  84. cin >> t;
  85. while (t--)
  86. {
  87. int m, n;
  88. cin >> m >> n;
  89. Matrix matrix(m, n);
  90. for (int i = 0; i < m; ++i)
  91. {
  92. for (int j = 0; j < n; ++j)
  93. {
  94. int value;
  95. cin >> value;
  96. matrix.setData(i, j, value);
  97. }
  98. }
  99. cout << "before:" << endl;
  100. matrix.print();
  101. matrix.rotate(matrix.geta());
  102. cout << "after:" << endl;
  103. matrix.print();
  104. cout << endl;
  105. }
  106. return 0;
  107. }

需要注意的是这道题目的输出格式。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/630466
推荐阅读
相关标签
  

闽ICP备14008679号