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