在矩阵c ++中交换2行

时间:2015-10-24 16:29:30

标签: c++ matrix rows swap

所以我有这个功课,到目前为止打印一个包含3行和4列的矩阵,我设法以某种方式(主要通过阅读这个论坛)来做,因为我们的大学教授不会解释这些事情是如何完成的。所以切入点。我的代码看起来像这样。我设法打印矩阵,然后我真的不知道这些东西是如何工作的,所以我尝试在temp矩阵中移动第1行,然后将其移回。但这看起来并不合适,但我真的不知道其他任何方式。我该怎么办?

int matrix[3][4] = { { 1,2,3,3 },{ 4,5,6,2 },{ 7,8,9,3 } };
 int temp[3][4];

 for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++)

        cout << "  " << matrix[i][j];
    cout << endl;
}


for (int i = 0; i < 3; i++) {

    temp[1][4] = matrix[1][4];
    matrix[3][4] = matrix[1][4];
    matrix[1][4] = temp[1][4];
}
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++)

        cout << "  " << matrix[i][j];
    cout << endl;
}


    return 0;

}

2 个答案:

答案 0 :(得分:2)

标题std::swap中声明了标准函数<utility>,允许交换两个数组。否则你可以自己编写适当的代码。

这是一个展示两种方法的示范程序。

#include <iostream>
#include <utility>


int main()
{
    const size_t M = 3;
    const size_t N = 4;

    int matrix[M][N] = 
    { 
        { 1, 2, 3, 3 },
        { 4, 5, 6, 2 },
        { 7, 8, 9, 3 } 
    };

    for ( const auto &row : matrix )
    {
        for ( int x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }

    std::cout << std::endl;

    std::swap( matrix[0], matrix[2] );

    for ( const auto &row : matrix )
    {
        for ( int x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }

    std::cout << std::endl;

    for ( size_t i = 0; i < N; i++ )
    {
        int tmp = matrix[0][i];
        matrix[0][i] = matrix[2][i];
        matrix[2][i] = tmp;
    }

    for ( const auto &row : matrix )
    {
        for ( int x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }

}

它的输出是

1 2 3 3 
4 5 6 2 
7 8 9 3 

7 8 9 3 
4 5 6 2 
1 2 3 3 

1 2 3 3 
4 5 6 2 
7 8 9 3 

答案 1 :(得分:1)

如果你想交换你可以这样做的第二行和第三行,请记住数组索引从0开始而不是1

    for (int i = 0; i < 4; i++) {
        temp = matrix[1][i];
        matrix[1][i] = matrix[2][i];
        matrix[2][i] = temp;
    }