如何在 C++ 中映射 1D 数组中的 2D 数组

How to map a 2D array in a 1D array in C++?

本文关键字:数组 2D 1D 映射 C++      更新时间:2023-10-16

假设,我有一个 MxN 数组:int *b;int **c;其中

  1. b中的值按列(从c)存储,我需要放置值从cb
  2. b中的值按行(从c开始)存储,我需要放置值从cb

我知道基本上我会这样做:

j = index / N;
i = index - (j * M);

为了将一维索引转换为二维坐标但有问题如何实施这两个案例,1)和2)?

设 W 为 2D 数组的宽度,H 为高度。然后假设行主布局,1D 索引 'ix' 与 2D 索引 [x,y] 相关如下:

ix = y*w + x;
y = ix / w;  // implicit floor
x = ix % w;

例如:

const int W = 3, H=2;
int m[H][W] = {{1,2,3}, {4,5,6}};
int* oneD = &m[0][0];
assert(oneD[1*W + 2] == m[1][2]); // element 6, y=1, x=2