c++ - C++如何替换2D数组中的行和列?

标签 c++ arrays multidimensional-array

我想用2D数组中的列替换行,但这不起作用。在两个数组中,每个数组的编号都不同。
而且在第二个数组中,在第二行和第四列中始终有相同的数字(4253936)。
我怎么写它,这样我就可以替换这些行和列,而不会丢失任何数字?
我是C++的新手,所以如果您能解释一下,我将非常感激。

    srand(time(NULL));

    int tab1[5][4];

    // Storing random numbers in array

    for(int i = 0;i<5;i++){
        for(int j = 0;j<4;j++){
            tab1[i][j] = rand()%18-9;
            cout<<tab1[i][j]<<' ';
        }
        cout<<endl;
    };
    

    int newtab[4][5];
    for(int i = 0; i < 4;i++){
        for(int j = 0;j<5;j++){
            newtab[i][j] = tab1[j][i];  
            cout<<newtab[j][i]<<' ';
        }
        cout<<endl;
    }

最佳答案

您描述的方法称为Transpose,您的代码似乎可以实现。

您看到的“怪异”数字是因为您的代码通过使未定义行为(UB)的索引之一超出数组范围而调用了未定义行为(UB),从而打印了垃圾值。
超出范围的索引是您的打印语句中的j,因为您错误地将其用于索引newtab 2D数组的行,该行的大小为4x5,表示4行。但是,用于索引j列的newtab从0变为4,因此,当j等于4时,您实际上是在做:

cout << newtab[4][0] << ' ';
这超出了范围,因为矩阵的定义类似于int newtab[4][5];
今天,垃圾值是4253936,明天可能会有所不同。在您的计算机中,可能不是->未定义行为!
要解决此问题,请更改:
cout << newtab[j][i] << ' ';
至:
cout << newtab[i][j] << ' ';

关于c++ - C++如何替换2D数组中的行和列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64251565/

相关文章:

c++ - 检查 CUDA 存在的程序需要 CUDA?

mysql - 如何在 Laravel 的一个表中连接外键不唯一的表

c - 结构中的二维数组

c++ - 不知道出了什么问题(字符串输入)

c++ - 从文本文件创建 vector vector

arrays - Octave - 将 '\n' 添加到字符串数组不会创建新行

c - 二维数组 - C 语言菜单

java - 在 Java 中将 2d 数组转换为列表列表

javascript - 如何将三维数组分割为三个 for in 循环?

c++ - 为什么重载 operator<< 来打印 Eigen 类成员会导致段错误?