gpt4 book ai didi

c++ - 使用 std::swap 交换二维数组中的行。它是如何工作的?

转载 作者:搜寻专家 更新时间:2023-10-31 01:24:53 25 4
gpt4 key购买 nike

我主要只是记录这个问题,因为有人可能会偶然发现它,并且可能会发现它很有用。而且,我非常好奇,std::swap 如何在二维数组上工作,例如:Arr[10][10]
< br/>我的问题出现了,因为根据我的理解,这样的数组只是一个带有一些重新索引的一维数组。
以供引用: How are 2-Dimensional Arrays stored in memory?

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 has an overload for arrays再次使用 std::swap 有效地交换每两个元素。

至于大小信息,它嵌入在数组类型中(Arr[i]int[x]),因此编译器知道 推断 T2intN10

加类:Why aren't variable-length arrays part of the C++ standard? ( but this particular case is OK )

关于c++ - 使用 std::swap 交换二维数组中的行。它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57516022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com