C++之vector的矩阵

  • Post author:
  • Post category:其他





创建二维矩阵


C++之vector入门

vector<vector<int>> matrix{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};



上下水平翻转




[

1

2

3

4

5

6

7

8

9

]

\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}






















































1








4








7





























2








5








8





























3








6








9




























































变成



[

7

8

9

4

5

6

1

2

3

]

\begin{bmatrix}7 & 8 & 9 \\4 & 5 & 6 \\1 & 2 & 3\end{bmatrix}






















































7








4








1





























8








5








2





























9








6








3



























































只需要

reverse(matrix.begin(),matrix.end());



左右竖直翻转




[

1

2

3

4

5

6

7

8

9

]

\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}






















































1








4








7





























2








5








8





























3








6








9




























































变成



[

3

2

1

6

5

4

9

8

7

]

\begin{bmatrix} 3 & 2 & 1 \\ 6 & 5 & 4 \\ 9 & 8 & 7 \end{bmatrix}






















































3








6








9





























2








5








8





























1








4








7



























































for(int i = 0 ; i < matrix.size();i++)
{
    reverse(matrix[i].begin(), matrix[i].end());
}



方阵转置




[

1

2

3

4

5

6

7

8

9

]

\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}






















































1








4








7





























2








5








8





























3








6








9




























































变成



[

1

4

7

2

5

8

3

6

9

]

\begin{bmatrix} 1 & 4 & 7 \\ 2 & 5 & 8 \\ 3 & 6 & 9 \end{bmatrix}






















































1








2








3





























4








5








6





























7








8








9



























































for (int i = 0; i < matrix.size() -1; i++)
{
    for (int j = i + 1; j < matrix.size(); j++)
    {
        swap(matrix[i][j], matrix[j][i]);
    }
}



方阵旋转

  • 向右旋转90°:先上下水平翻转 + 再转置。或者先转置 + 再左右竖直翻转。




    [

    1

    2

    3

    4

    5

    6

    7

    8

    9

    ]

    \begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}






















































    1








    4








    7





























    2








    5








    8





























    3








    6








    9




























































    变成



    [

    7

    4

    1

    8

    5

    2

    9

    6

    3

    ]

    \begin{bmatrix} 7 & 4 & 1 \\ 8 & 5 & 2 \\ 9 & 6 & 3 \end{bmatrix}






















































    7








    8








    9





























    4








    5








    6





























    1








    2








    3



























































  • 向右旋转90°:先左右竖直翻转 + 再转置。或者先转置 + 再上下水平翻转。




    [

    1

    2

    3

    4

    5

    6

    7

    8

    9

    ]

    \begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}






















































    1








    4








    7





























    2








    5








    8





























    3








    6








    9




























































    变成



    [

    3

    6

    9

    2

    5

    8

    1

    4

    7

    ]

    \begin{bmatrix} 3 & 6 & 9 \\ 2 & 5 & 8 \\ 1 & 4 & 7 \end{bmatrix}






















































    3








    2








    1





























    6








    5








    4





























    9








    8








    7



























































  • 旋转180°:等于上下水平翻转+左右竖直翻转。

题:LC48.旋转图像

// 例子:向右旋转90°
int n = matrix.size();
for (int i = 0; i < n / 2; i++)
{
    for (int j = 0; j < n; j++)
    {
        swap(matrix[i][j], matrix[n - 1 - i][j]);
    }
}
for (int i = 0; i < n -1; i++)
{
    for (int j = i + 1; j < n; j++)
    {
        swap(matrix[i][j], matrix[j][i]);
    }
}



版权声明:本文为sandalphon4869原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。