Как мне лучше всего обрабатывать динамические многомерные массивы в 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.