Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::Swap交换二维数组中的行。它是如何工作的?_C++_Arrays_Multidimensional Array_Swap - Fatal编程技术网

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

C++ 使用std::Swap交换二维数组中的行。它是如何工作的?,c++,arrays,multidimensional-array,swap,C++,Arrays,Multidimensional Array,Swap,我主要是记录这个问题,因为有人可能会偶然发现它,并发现它很有用。另外,我非常好奇std::swap如何在2D数组上工作,比如:Arr[10][10] 出现我的问题是因为就我的理解而言,像这样的数组只是一个1D数组,需要重新编制索引。 供参考: intmain() { 常数int x=10; 常数y=10; 国际协议[y][x]; //用一些元素填充数组。。。 对于(int i=0;i

我主要是记录这个问题,因为有人可能会偶然发现它,并发现它很有用。另外,我非常好奇
std::swap
如何在2D数组上工作,比如:
Arr[10][10]


出现我的问题是因为就我的理解而言,像这样的数组只是一个1D数组,需要重新编制索引。
供参考:

intmain()
{
常数int x=10;
常数y=10;
国际协议[y][x];
//用一些元素填充数组。。。
对于(int i=0;i
如果我们的数据类型是,我可以理解交换两个“行”,比如指向
int**Arr2D
这样的指针,然后用
std::swap(Arr2D[2],Arr2D[5])
交换,因为我们不需要知道这里的长度,我们只需要交换两个指针,指向“1D数组”。
但是
std::swap
如何处理
Arr[y][x]

是否使用循环交换
x
长度内的所有元素?

有效地交换每两个元素,再次使用
std::swap

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


OT:()

简而言之,答案是
类型
为王。二维数组在访问时衰减为指向第一个一维数组的指针。(在您的例子中,指向int[10]数组的指针。)
std::swap
需要知道它必须交换的内容的大小,通过使用
[…]
取消对数组指针的引用,将类型保留为
int[10]
,而
std::swap
可以处理该类型。您正在交换两个
int[10]
数组。有关标准中的基础(两者都适用),请参阅基本类型合并和中的扩展