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