将1D数组转换为2D数组C ++

时间:2016-12-18 18:52:55

标签: c++

这里我有一个10的数组。我怎么能把它变成2×5的二维数组。

double arr1D[10] = {1,2,3,4,5,6,7,8,9,10};

我想要的2D阵列是什么样的:

double arr2D[2][5] = {1,2,3,4,5},{6,7,8,9,10};

如果我有一个指向数组的指针,我该怎么办?有点像这样:

double arr1D[10];
double*ptr;
ptr = arr1D;

1 个答案:

答案 0 :(得分:0)

让我们仔细看看你的arr1D在记忆中的样子:

+---+---+---+---+---+---+---+---+---+----+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
+---+---+---+---+---+---+---+---+---+----+

这是一段简单而连续的记忆。

现在arr2D在内存中的样子怎么样?实际上就是一样!

所以最简单的方法就是使用例如std::copy_n从一个数组复制到另一个数组:

double arr1D[10] = {1,2,3,4,5,6,7,8,9,10};
double arr2D[2][5];

std::copy_n(&arr1D[0], 10, &arr2D[0][0]);

对于最后一个代码段,您没有“2D数组”。相反,指针变量ptr将指向arr1D的第一个元素。然后,您几乎可以在使用ptr时使用arr1D(最大的区别是sizeof arr1D != sizeof ptr)。