为数组添加维度
Adding dimension to an array
是否可以在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
相关文章:
- 如何将元素添加到数组的线程安全函数?
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 添加到数组指针
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 将数组的元素添加到链表中
- 如何在C++中将元素添加到非固定大小的数组中?
- 将在堆栈上声明的元素添加到静态数组
- const_cast静态数组以添加恒常性
- 在 char* 数组中添加两个索引
- c++ 如何在数组的开头添加值并为其编制索引?
- 检查数组中是否有字符串中的值,如果没有,则添加它
- 添加数组特定列的元素
- 添加数组元素:需要左键作为赋值的左操作数
- 添加数组所有元素的 SSE 指令
- 如何添加数组的偶数和奇数之和
- 向std::multimap添加数组值
- 用内部类函数递归地添加数组数
- 使用自增操作符添加数组元素
- 创建一个模板函数,如果数据类型不同,则添加数组的元素