向数组添加维度

时间:2013-03-13 17:24:12

标签: c++ matrix multidimensional-array

是否可以在c ++中为现有数组添加一个或多个维度?例如,我有2维数组,在某个地方我需要为这个数组添加一个或多个维度。

2 个答案:

答案 0 :(得分:2)

无论如何,正如已经提到过的poitroae,你需要某种副本。然而,如果您使用1-D阵列模拟2-D和3-D阵列,这个副本将会加速很多,这就是我决定首先发布答案的原因。

为了使用1-D阵列模拟2-D和3-D阵列,您可以使用简单的数学运算来索引数组。这降低了内存分段,使其更快,因为有更多的chache命中。要添加尺寸,您只需创建另一个具有适当尺寸的1-D数组,然后复制到当前数据中。

当我找到完成此操作的代码时,我将提供一个示例。

编辑:显然以上并不是他想要的。我将在下面再试一次

你有:模拟2D数组的一维数组。

看起来你不想真正为数组添加整个维度,只需要矩阵。 (基本上在保留数据的同时从一种尺寸调整到另一种尺寸)

所以,这是一个例子:

你下面有一个3x3(U = 3,V = 3)矩阵

逻辑表示:

|3 5 6|
|7 2 5|
|1 0 2|

物理表示(int [3 * 3]“矩阵”)

[3, 5, 6, 7, 2, 5, 1, 0, 2]

- 转换为4x4(X = 4,Y = 4) -

int* newMatrix = new int[X*Y];
for(int i = 0; i < Y; i++)
{
    for(int k = 0; k < X; k++)
    {
        //copy from old if it falls in bounds
        if(k < U && i < V)
        {
            newMatrix[i*X + k] = matrix[i*U + k];
        }
        //Otherwise, zero out
        else
        {
            newMatrix[i*X + k] = 0;
        }
    }
}
delete [] matrix;

那应该会给你一个4x4的newMatrix。

逻辑值:

|3 5 6 0|
|7 2 5 0|
|1 0 2 0|
|0 0 0 0|

物理:

[3, 5, 6, 0, 7, 2, 5, 0, 1, 0, 2, 0, 0, 0, 0, 0,]

如果你像我一样使用变量,你应该能够写一个能够做到这一点的函数 对于任何矩阵,只要你给它准确的参数(矩阵的X和Y维度)

走另一条路 - 缩小尺寸 - 它应该是一个类似的设置(双循环),你检查你是否在边界并复制只有你。如果没有,你根本就不复制任何东西。我会让你写那个。

我希望这更符合您的需求。我在错误的背景下跳上了维度。决定在矩阵方面更多地考虑答案。

答案 1 :(得分:0)

你无法隐含地这样做。您必须创建一个新的n维数组并复制所需的值

int new_array[10][10][10];

// copy using a loop or a std::-function