将矩阵转移到阵列中
Transfer a matrix into an array
i正在解决一个问题,该问题要求我使用单个订阅的数组操作双订阅数组。因此,问题是:如何将双重标记的数组转换为单次标记的数组?或者,如果无法转换。.如何通过单个订阅的数组操作双重订阅?例如:
int matrix[ m ][ n ];
//How can you transform matrix into array? Or operate it?
int array[ m * n ];
基本上,问题问:"创建一个DoubleSubscriptedArray
。在施工时,该类应该能够创建任何数量的行和任何数量的列的数组成为具有rows * columns
数量元素的整数的单个单曲阵列"
您的矩阵被存储在M次n元素中,在内存中连续。您可以做的是将矩阵的第一个元素解释为int*,并且您有数组。它可以防止复制元素。
int main()
{
int matrix[3][3] = { {1, 0, 0}, {0, 1, 0}, {0, 0, 1} };
int* array = &matrix[0][0];
// int array[9] = {1, 0, 0, 0, 1, 0, 0, 0, 1}
return 0;
}
如果您需要复制元素,则可以尝试
#include <memory>
int main()
{
int matrix[3][3] = { {1, 0, 0}, {0, 1, 0}, {0, 0, 1} };
int array[9];
std::memcpy(&array[0], &matrix[0][0], sizeof(array));
// int array[9] = {1, 0, 0, 0, 1, 0, 0, 0, 1}
return 0;
}
最简单的答案:
int array[m * n];
for (int y = 0; y < n; ++y) {
for (int x = 0; x < m; ++x) {
array[y * m + x] = matrix[x][y];
}
}
其中:
-
y
-行号 -
x
-列号
现在您需要将所有行序列化为一个:
row_no/col_no | 0 | 1 | 2 |
______________|___|___|___|
0 | 1 | 2 | 3 | <-- matrix data
1 | 4 | 5 | 6 |
||
/
/
array_no 0 1 2 3 4 5
| | | | | |
[ 1, 2, 3, 4, 5, 6 ] <-- array data
array_no = row_no * number_of_rows + col_no
您可以 test IT:(
P.S您也可以这样做:
int* array = (int*)matrix;
它是不复制的版本:(
您可以重新计算一个维数阵列的索引来存储二维数组的cORVENDER值。
如果您需要复制,则Eficient Aspon将是通过行从两个昏暗的数组复制到一个昏暗的dim,因为多维数组存储在原始市长订单中,索引可以计算为
onedimindex = row*n col
在矩阵[row,col]
上获取元素的位置之后,您可以通过相同的计算从一个维数阵列中检索内容。
相关文章:
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 位阵列上的快速AND运算
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 如何将元素从向量转移到新数组?
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 库特<<恩德尔;不适用于打印 2D 阵列
- 数组类 阵列的打印输出
- 从较小的阵列到较大的阵列的元素级转换
- 将矩阵转移到阵列中
- OPENCL-如何使辅助功能返回阵列并将内存的部分从恒定内存空间转移到私有
- 在阵列C 中删除和转移剩余的元素
- 算法将一个硬币矩阵转移到另一个硬币阵列