¿Cómo manejo mejor las matrices dinámicas multidimensionales en C / C ++?
¿Cuál es la forma aceptada / más utilizada para manipular arreglos multidimensionales dinámicos (con todas las dimensiones desconocidas hasta el tiempo de ejecución) en C y / o C ++.
Estoy tratando de encontrar la forma más limpia de lograr lo que hace este código 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]);
}
}
(lee de std_in solo para aclarar que las dimensiones no se conocen hasta el tiempo de ejecución).
Editar: Noté que esta pregunta es bastante popular a pesar de que es bastante antigua. En realidad no estoy de acuerdo con la respuesta más votada. Creo que la mejor opción para C es usar una matriz unidimensional como Guge dijo a continuación "Puede asignar filascolssizeof (int) y acceda por tabla [row * cols + col] ".
Hay una serie de opciones con C ++, si realmente le gusta boost o stl, las respuestas a continuación pueden ser preferibles, pero la opción más simple y probablemente más rápida es usar una matriz unidimensional como en C.
Otra opción viable en C y C ++ si desea la sintaxis [] [] es que la respuesta de lillq en la parte inferior es construir manualmente la matriz con muchos malloc.