访问具有绝对元素编号的2D数组元素

时间:2014-09-23 18:35:17

标签: c++ arrays

我有一个二维数组,我通常想要访问这些元素:

val = my_array[row][col];

但是我还需要不时地使用它们的绝对索引来访问元素,其中行和列是未知的。 "绝对"给定元素的索引可以如下计算:

abs_idx = row*numCols + col;

我正在考虑如下实现这个目标

mydatatype *my_array_abs = new mydatatype[numRows*numCols];
mydatatype **my_array = new mydatatype*[numRows];
for (int ii=0; ii<numRows; ii++)
{
    my_array[ii] = &my_array_abs[ii*numCols];
}

这是实现我的目标的合适方式,还是我应该遇到任何问题或效率低下?

2 个答案:

答案 0 :(得分:1)

为了达到你想要的效果,你需要改变你的路线:

mydatatype *my_array;

mydatatype **my_array = new mydatatype*[numRows] ;

注意:我看到这个方法只有一个问题,你需要连续的内存块。 否则你的方法很好。

答案 1 :(得分:1)

我很想使用std :: vector来避免原始数组的所有危险:

#include <vector>
#include <iostream>
typedef int mydatatype;
typedef std::vector<std::vector<mydatatype> > myvectortype;

int numCols = 10;
int numRows = 100;

mydatatype& at_absolute(myvectortype& v, int index) {
  return v[index / numRows][index % numRows];
}

int main() {
  myvectortype my_array(numRows, std::vector<mydatatype>(numCols, 0));

  my_array[1][2] = 31;
  std::cout << at_absolute(my_array, 102) << '\n';
}