【问题标题】:Get position of address in array 2d获取数组 2d 中地址的位置
【发布时间】:2015-10-12 18:10:22
【问题描述】:

要获取c++ 中数组的位置,您可以执行以下操作:

class Slot
{
public:

    int Color;
    std::string name;
    /*.... more properties*/
};

int main()
{
    Slot pix[60];

    Slot& randomSlot = pix[12];
    randomSlot.Color = 12;
    randomSlot.name = "sdsd";

    Slot* addressOfSlot = &randomSlot;
    Slot* arrayStart = pix;

    //get the original pos
    int x = addressOfSlot - arrayStart;
}
  1. 您将如何获得像这样的2d array 的 x 和 y 位置? :

    Slot pix[60][21];
    

我想使用这种方法,因为我将使用指针/引用,并且我希望有一种快速的方法来获得原始位置,

  1. 您也可以在 c# 中使用不安全代码或类似的代码来执行此操作吗?

【问题讨论】:

  • 你将如何表示 [30][30]?您是否试图获得 2d 位置的 1d 位置?
  • 你是说给定一个值,你想在数组中找到它的索引吗?
  • @NathanOliver 与它在 C# byte[,] myArray 中的表示方式相同,我确定在 c# 中是连续内存,我希望在 c# 中执行此操作,但 c++ 是解释问题的唯一方法。 Two-dimensional array in memory
  • @RonBeyer 是正确的。
  • 至少在 C# 中,鉴于您需要 O(1) 查找,更好的数据结构将是哈希表或字典。如果 X/Y 很重要,您可以将其与值一起存储为元组。

标签: c# c++ arrays


【解决方案1】:

您可以从大小为ROWS x COLS 的二维数组映射到相同大小的一维数组,反之亦然

array2D[x][y] <-> array1D[x * COLS + y];

其中COLS 是列数。这利用了在 C 或 C++ 中数组存储在技术上称为row-major order 的事实。 Fortran 或 MATLAB 使用列优先顺序,因此索引是转置的。

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 2012-04-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多