Каков приемлемый/наиболее часто используемый способ манипулирования динамическими (со всеми параметрами, неизвестными до выполнения) многомерными массивами в 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 является использование одномерного массива, как сказал ниже: "Вы можете выделить rowscolssizeof (int) и получить к нему доступ по таблице [row * cols + col].".
Существует ряд вариантов с С++, если вам действительно нравится boost или stl, тогда ответы ниже могут быть предпочтительными, но самый простой и, вероятно, самый быстрый выбор - использовать одномерный массив, как в C.
Другим жизнеспособным выбором в C и С++, если вы хотите, чтобы синтаксис [] [] был линглным ответом внизу, вручную создает массив с большим количеством malloc.