2013-03-13 142 views
0

是否可以在C++中向现有数组添加一个或多个维度?例如,我有2维数组,在某处我需要添加一个或多个维度到这个数组。将维添加到数组

回答

0

你不能这样做隐含。你必须创建一个新的数组n维和复制所需的值

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

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

不管如何,作为poitroae已经提到的,您将需要某种形式的副本。然而,如果你用一维数组模拟二维和三维阵列,这个副本会加速很多,这就是为什么我决定首先发布一个答案。

为了模拟具有一维数组的二维和三维数组,您可以使用简单的数学方法来索引数组。这降低了内存分割速度,因为有更多的chache命中。要添加维度,您只需创建适当大小的另一个一维数组,并复制当前数据。

我会提供一个例子,当我可以找到代码,我已经做到了这一点。

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

你有:一维数组模拟二维数组。

看起来好像你不希望实际上将整个维度添加到数组中,只是矩阵。 (基本上调整从一种尺寸到另一种同时保持数据)

所以,在这里是一个例子:

你有一个3×3(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尺寸)

要走另一条路 - 缩小尺寸 - 它应该是一个类似的设置(双循环)你在哪里检查你是否在限制范围内,只有在你的情况下才能复制。如果不是,你根本不要复制任何东西。我会让你写那个。

我希望这是更多你正在寻找。我在错误的背景下跳上了维度。决定在矩阵方面更多地考虑答案。

+0

实际上我不知道有多少维度提前添加我的矩阵。我会等你的例子。 – 2013-03-13 17:50:04

+0

根据给你什么样的数据,你可以计算出尺寸并创建一维数组,只需这样做: int * matrix = new int [X * Y];其中X和Y是XxY矩阵的尺寸 – 2013-03-13 17:53:20

+0

从那里您可以使用宽度和偏移量将数组索引到数组中。我会尽快提供上面的例子。 – 2013-03-13 17:55:46