c++ - 用 std::swap 交换二维数组中的行。它是如何工作的?
问题描述
我主要只是记录这个问题,因为有人可能会偶然发现它,并且可能会发现它很有用。而且,我非常好奇,如何std::swap
在 2D 数组上工作,例如:Arr[10][10]
.
我的问题出现了,因为据我了解,这样的数组只是一个带有一些重新索引的一维数组。
供参考:
二维数组如何存储在内存中?
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]
is int[x]
)中,因此编译器知道推断 T2
asint
和N
as 10
。
推荐阅读
- python - 如何以最佳方式在 PySpark 中以两个条件连接两个表
- c# - c# excel将多色文本写入同一个单元格
- mysql - 在 MySQL 中优化和分区具有 3 亿条记录的大表的最佳方法
- java - JAVA:我需要按降序对数组中的系列进行排序
- android - android 应用程序中使用的 AWS Appsync 突变功能无法将数据插入 DynamoDB
- sas - SAS 不评估 %PUT 的内容
- python - 使用 python 在 Visual Studio 代码中开发应用程序
- react-native - 如何在 Scrollview (React Native) 中禁用反弹效果?
- reactjs - Setting variable with ReactJS's useState hook does not work
- google-analytics - 每个会话跟踪多个目标以获取唯一 URL?