[英]C++ How to replace rows and columns in 2D array?
我想用二維數組中的列替換行,但這不起作用。 兩個 arrays 中的數字各不相同。
在第二個數組中,第二行和第四列也總是有相同的數字 (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),方法是讓其索引之一超出數組邊界,從而打印垃圾值。
超出范圍的索引在您的 print 語句中是j
,因為您錯誤地使用它來索引newtab
二維數組的行,該數組的大小為 4x5,即 4 行。 但是,用於索引newtab
的列的j
從 0 變為 4,因此當j
等於4
時,您實際上是在執行以下操作:
cout << newtab[4][0] << ' ';
這是越界的,因為你的矩陣被定義為int newtab[4][5];
.
今天那個垃圾值是 4253936,明天可能不一樣。 在您的計算機中是這樣,在我的計算機中可能不是 -> 未定義的行為!
要解決此問題,請更改:
cout << newtab[j][i] << ' ';
到:
cout << newtab[i][j] << ' ';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.