获取动态2d数组元素的行/列

时间:2011-11-30 02:59:34

标签: c++ arrays new-operator

我目前正在使用以下代码获取2D int数组中元素的当前行和列:

const int num_rows = 5;
const int num_columns = 7;

int a[num_rows][num_columns];

int *p = &a[2][4];

int row = (p - &a[0][0]) / num_columns;
int col = (p - &a[row][0]);

这很好但现在我需要更改代码以将行数和列数作为参数。据我所知,这意味着我需要动态创建2D数组:

int** ary = new int*[sizeX]; 

for(int i = 0; i < sizeX; ++i) 
    ary[i] = new int[sizeY]; 

如果我以这种方式创建2D数组,上面的代码可以找到行/列中断。我该怎么办?

2 个答案:

答案 0 :(得分:0)

 int *ary = new int [sizeX * sizeY]; // allocate memory for the 2d array

 for(int i = 0; i < sizeX; ++I)
     for(j = 0; j < sizeY; ++j) 
          ary[i * sizeY + j] = 0;

  // to get the value of collumn c and row r: use ary[c * sizeY + r];

答案 1 :(得分:0)

int row = (p - &a[0][0]) / num_columns;
int col = (p - &a[row][0]);

离开指针算术是一个非常好的主意。不要这样做!你基本上是减去指针并用num_columns除以那个数字,那个数字就是随机的。

如果要获取元素的行/列,请一次搜索一个元素。

for(int row=0; row<num_rows; ++row) {
   for(int column=0; column<num_columns; ++column) {
      if (a[row][column] == element) {
         // we got it!
      }
   }
}