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.

questionAnswers(10)

yourAnswerToTheQuestion