为数组添加维度

Adding dimension to an array

本文关键字:添加 数组      更新时间:2023-10-16

是否可以在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