Como lidar melhor com matrizes multidimensionais dinâmicas em C / C ++?
Qual é a maneira aceita / mais usada para manipular matrizes multidimensionais dinâmicas (com todas as dimensões desconhecidas até o tempo de execução) em C e / ou C ++.
Estou tentando encontrar a maneira mais limpa de realizar o que esse código Java faz:
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]);
}
}
(lê std_in apenas para esclarecer que as dimensões não são conhecidas até o tempo de execução).
Edit: notei que esta pergunta é bastante popular, embora seja bastante antiga. Na verdade, eu não concordo com a resposta mais votada. Eu acho que a melhor opção para C é usar uma matriz unidimensional como Guge disse abaixo "Você pode alocar linhascolssizeof (int) e acesse-o pela tabela [row * cols + col]. ".
Existem várias opções no C ++, se você realmente gosta de boost ou stl, as respostas abaixo podem ser preferíveis, mas a opção mais simples e provavelmente a mais rápida é usar uma matriz unidimensional como em C.
Outra opção viável em C e C ++, se você deseja que a sintaxe [] [] seja a resposta do lillq na parte inferior, é criar manualmente o array com muitos mallocs.