是否可以在 C++ 中向现有数组添加一维或多维?例如,我有一个二维数组,在某个地方我需要向这个数组添加一个或多个维度。
2 回答
无论如何,正如 poitroae 已经提到的,您将需要某种副本。但是,如果您使用 1-D 数组模拟 2-D 和 3-D 数组,则此副本会大大加快速度,这就是我决定首先发布答案的原因。
为了使用 1-D 数组模拟 2-D 和 3-D 数组,您可以使用简单的数学来索引数组。这降低了内存分段,使其更快,因为有更多的 chache 命中。要添加维度,您只需创建另一个具有适当大小的一维数组,然后复制当前数据。
当我可以找到执行此操作的代码时,我将提供一个示例。
编辑:显然以上不是他想要的。我会在下面再试一次
你有:一个模拟二维数组的一维数组。
似乎您不想实际将整个维度添加到数组中,而只是矩阵。(基本上在保留数据的同时从一种尺寸调整到另一种尺寸)
所以,这里有一个例子:
您在下面有一个 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 维度),它就可以对任何矩阵执行此操作
换一种方式——缩小尺寸——它应该是一个类似的设置(双循环),你检查你是否在界限内,只有当你在时才复制。如果没有,你根本不复制任何东西。我会让你写那个。
我希望这是您正在寻找的更多内容。我在错误的上下文中跳跃维度。决定更多地用矩阵来思考答案。
您不能隐式执行此操作。您必须创建一个新的 n 维数组并复制所需的值
int new_array[10][10][10];
// copy using a loop or a std::-function