¿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.

Respuestas a la pregunta(10)

Su respuesta a la pregunta