是否可以在c++中添加一个或多个维度到现有的数组?例如,我有一个二维数组,在某个地方我需要为这个数组添加一个或多个维度。
无论如何,正如poitroae已经提到的,您将需要某种类型的副本。然而,如果你用一维数组模拟二维和三维数组,这个副本将会大大加快速度,这就是为什么我决定在第一时间给出答案。
为了用一维数组模拟二维和三维数组,您可以使用简单的数学方法来索引数组。这降低了内存分割,使其更快,因为有更多的缓存命中。要添加一个维度,您只需创建另一个具有适当大小的1-D数组,并复制当前数据。
当我能找到这样做的代码时,我会提供一个示例。
编辑:显然以上并不是他想要的。我再试一次
你有:一个模拟二维数组的一维数组。
看起来你并不想给数组增加一个维度,而只是增加一个矩阵。(基本上从一个大小调整到另一个大小,同时保留数据)
那么,这里有一个例子:
在
下面有一个3x3 (U=3, V=3)矩阵逻辑表示:
|3 5 6|
|7 2 5|
|1 0 2|
物理表示(int[3*3] "matrix")
[3, 5, 6, 7, 2, 5, 1, 0, 2]
——转换为一个4 x4 (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维)
以另一种方式——downsize——它应该是一个类似的设置(double for循环),你检查你是否在边界内,只有当你在边界内时才复制。如果没有,你就不要复制任何东西。我让你写那个。
我希望这是更多的你正在寻找。我在错误的情况下跳进了维度。决定用矩阵的形式来思考答案
您不能隐式地执行此操作。您必须创建一个新的n维数组,并复制所需的值
int new_array[10][10][10];
// copy using a loop or a std::-function