Как мне лучше всего обрабатывать динамические многомерные массивы в C / C ++?

Каков принятый / наиболее часто используемый способ манипулирования динамическими (со всеми измерениями, неизвестными до времени выполнения) многомерными массивами в C и / или C ++.

Я пытаюсь найти самый чистый способ выполнить то, что делает этот код Java:

public static void main(String[] args){
 Scanner sc=new Scanner(System.in);
 int rows=sc.nextInt();
 int cols=sc.nextInt();
 int[][] data=new int[rows][cols];
 manipulate(data);
}

public static void manipulate(int[][] data){
   for(int i=0;i<data.length;i++)
   for(int j=0;j<data[0].length.j++){
         System.out.print(data[i][j]);       
   }    
}

(читает из std_in просто чтобы уточнить, что измерения не известны до времени выполнения).

Редактировать: я заметил, что этот вопрос довольно популярен, хотя он довольно старый. Я на самом деле не согласен с ответом сверху. Я думаю, что лучший выбор для C - это использовать одномерный массив, как сказал Гуге ниже: «Вы можете размещать строкисмещ_по_столбцамsizeof (int) и получить к нему доступ по таблице [row * cols + col]. ".

Есть несколько вариантов с C ++, если вам действительно нравятся boost или stl, то ответы ниже могут быть предпочтительнее, но самый простой и, вероятно, самый быстрый выбор - использовать одномерный массив, как в C.

Другим приемлемым выбором в C и C ++, если вы хотите использовать синтаксис [] [], является ответ lillq внизу, это ручное построение массива с большим количеством malloc.

Ответы на вопрос(10)

Ваш ответ на вопрос