将矩阵转移到阵列中

Transfer a matrix into an array

本文关键字:阵列 转移      更新时间:2023-10-16

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]

上获取元素的位置

之后,您可以通过相同的计算从一个维数阵列中检索内容。