簡體   English   中英

C++ 如何替換二維數組中的行和列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM