我想用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/