получение строки / столбца динамического 2d элемента массива - PullRequest
0 голосов
/ 30 ноября 2011

В настоящее время я использую следующий код для получения текущей строки и столбца элемента в массиве 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 голосов
/ 30 ноября 2011
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!
      }
   }
}
0 голосов
/ 30 ноября 2011
 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];
...