Wie gehe ich am besten mit dynamischen mehrdimensionalen Arrays in C / C ++ um?

Was ist die akzeptierte / am häufigsten verwendete Methode, um dynamische (mit allen Dimensionen, die erst zur Laufzeit bekannt sind) mehrdimensionale Arrays in C und / oder C ++ zu bearbeiten.

Ich versuche, den saubersten Weg zu finden, um zu erreichen, was dieser Java-Code bewirkt:

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]);       
   }    
}

(Liest aus std_in, um zu verdeutlichen, dass die Dimensionen erst zur Laufzeit bekannt sind.)

Edit: Mir ist aufgefallen, dass diese Frage ziemlich beliebt ist, obwohl sie ziemlich alt ist. Ich stimme der Antwort mit den meisten Stimmen nicht zu. Ich denke, die beste Wahl für C ist die Verwendung eines eindimensionalen Arrays, wie Guge unten sagte: "Sie können Zeilen zuweisen colssizeof (int) und greife über die Tabelle [row * cols + col] darauf zu. ".

In C ++ gibt es eine Reihe von Möglichkeiten. Wenn Sie Boost oder STL wirklich mögen, sind die folgenden Antworten möglicherweise vorzuziehen. Die einfachste und wahrscheinlich schnellste Möglichkeit ist jedoch, ein eindimensionales Array wie in C zu verwenden.

Wenn Sie in C und C ++ die Syntax [] [] verwenden möchten, erstellen Sie das Array manuell mit vielen Mallocs.

Antworten auf die Frage(20)

Ihre Antwort auf die Frage