在C ++中转换2D数组

时间:2017-10-02 22:20:01

标签: c++ arrays matrix transpose

我有一个2D静态数组,如下所示:

1 1 1 1 1 1 
2 2 2 2 2 2 
3 3 3 3 3 3 
4 4 4 4 4 4 
5 5 5 5 5 5 
6 6 6 6 6 6 

我正在尝试转置此数组的行和列:

1 2 3 4 5 6 
1 2 3 4 5 6 
1 2 3 4 5 6 
1 2 3 4 5 6 
1 2 3 4 5 6 
1 2 3 4 5 6

我能够通过使用如下的一维数组来解决它:

for (int i = 0; i < 6; ++i)
    for (int j = 0; j < 6; ++j)
        copyArray[i * 6 + j] = array[j * 6 + i];

但是我如何为一个10x10的数组做这个呢?

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

你应该使用二维数组。

#include <iostream>
using namespace std;

const int N = 10;

int main()
{
    int a[N][N];
    int b[N][N];

    // fill matrix
    cout << "Input matrix:" << endl;
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
            cin >> a[i][j];

    // transpose matrix
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
            b[i][j] = a[j][i];

    // print matrix
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
        {
            cout << b[i][j] << ' ';
        }

        cout << endl;
    }

    return 0;
}

答案 1 :(得分:1)

您正在寻找类似的东西:

std::map

答案 2 :(得分:0)

您也可以轻松地完成此操作

#include <iostream>

using namespace std;

int main(){
int n,m;
cin>>n>>m;

int arr_1[n][m];
int arr_2[n][m];

for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
        cin>>arr_1[i][j];
    }
}
for(int i=0;i<m;i++){
    for(int j=0;j<n;j++){

        cout<< arr_1[j][i]<<' ';
    }
    cout<<endl;
}

}