繁体   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