c++ - 在 C++ 中切换矩阵列和行

标签 c++ arrays math matrix row

我有一个 6 x 6 矩阵,我将其值存储在一个大小为 36 的一维数组中。我想重新排列它,以便行是列,列是行。我的方法是尝试将值复制到另一个数组中,但排序正确。我正在尝试一个 for 循环:

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

这对于由第一列组成的第一个新行来说工作正常,但我如何继续做所有这些?我试过嵌套 for 循环,但无法使用迭代器提出正确的算法。我可以手动执行此操作,但希望通过代码完成此操作。

我正在用 C++ 编写代码,但如果有人能用类似的语言来编写代码,那就太好了。我觉得这是一道数学题。

问题:如何解决切换行和列的问题? (示例:如果我将第一行和第一列表示为 0,在 6x6 矩阵中,那么行和列都从 0 变为 5。因此,通过切换行和列,第 2 行第 5 列中的值将被切换第 5 行第 2 列中的值。)

最佳答案

难道你不能只使用嵌套的 for 循环来做这样的事情吗?

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

这是一个测试程序,您可以运行它来证明它有效:

#include <stdio.h>

int main()
{
    int array[36] = {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};
    int copyarray[36];

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

    for (int i = 0; i < 36; ++i)
    {
        if (i % 6 == 0)
            printf("\n");

        printf("%d ", array[i]);

    }

    printf("\n");
    printf("\n");

    for (int i = 0; i < 36; ++i)
    {
        if (i % 6 == 0)
            printf("\n");

        printf("%d ", copyarray[i]);
    }

    return 0;
}

输出:

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

关于c++ - 在 C++ 中切换矩阵列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325998/

相关文章:

php - 使用 foreach 从另一个数组创建关联数组

ios - 旋转 3D 立方体,使一面朝向用户

java - Java中非线性方程的最大化

C++ : Print value of unsigned short variable as unicode character

c++ - 如何在 MFC 中使用 CfileDialog 选择特定文件

python - 通过两列连接两个数组并删除不需要的部分 PYTHON

algorithm - 在 N×N 二进制矩阵中找到仅包含零的最大矩形

php - 在PHP中计算邮政编码之间的距离

C++ 事件处理 - const 问题

C++从文件中读取并比较魔数(Magic Number)