簡體   English   中英

使用std :: swap交換2D數組中的行。 它是如何工作的?

[英]Swap rows in a 2D array with std::swap. How does it work?

我主要只是在記錄這個問題,因為有人可能會偶然發現它,並且發現它很有用。 而且,我很想知道std::swap如何在類似於Arr[10][10]的2D數組上工作。

之所以出現我的問題,是因為據我了解,像這樣的數組只是帶有一些重新索引的一維數組。
供參考: 二維數組如何存儲在內存中?

int main()
{
    const int x = 10;
    const int y = 10;
    int Arr[y][x];
    // fill the array with some elements...
    for (int i = 0; i < x*y; i++)
    {
        Arr[i / y][i % x] = i;
    }

    // swap 'row 5 & 2'
    // ??? how does swap know how many elements to swap?
    // if it is in fact stored in a 1D array, just the
    // compiler will reindex it for us
    std::swap(Arr[5], Arr[2]);

    return 0;
}

我可以理解如果我們的數據類型是交換兩個“行”,比如說像int** Arr2D類的指針的指針,然后與std::swap(Arr2D[2], Arr2D[5])因為我們不需要知道在這里的長度,我們只需要交換兩個指針,就指向“一維數組”。
但是std::swap如何與Arr[y][x]
是否使用循環交換x長度內的所有元素?

std::swap的數組有一個重載 ,可以使用std::swap再次有效地交換每兩個元素。

至於大小信息,它嵌入在數組類型內( Arr[i]int[x] ),因此編譯器知道將T2 推導int並將N 推導10

OT: 為什么可變長度數組不是C ++標准的一部分? 但這種情況可以

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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