Cómo devolver una matriz multidimensional utilizando dos parámetros en C ++

En esta respuesta, me referiré a la matriz 2D como una matriz multidimensional. Se puede aplicar el mismo método para dimensiones de más de 2.

Usando potentes funciones orientadas a objetos de C ++, es muy fácil devolver una matriz multidimensional. Simplemente cree una clase cuyos objetos representen una matriz 2-D y puede devolver fácilmente ese objeto (matriz 2-D) devolviendo su dirección o valor o simplemente por referencia. Supongo que la forma orientada a objetos C ++ de devolver matrices 2-D ya está cubierta en varias respuestas a esta pregunta. Pero quiero enfatizar la forma en que C ++ devuelve una matriz 2-D usando punteros.

Déjame mostrarte con un ejemplo:

Este es solo un programa de demostración que toma datos en una matriz 2D e imprime los elementos. He puesto comentarios en líneas importantes y espero que el código se explique por sí mismo. Este tipo de uso de devolver una matriz también se puede usar en C. Aquí está el fragmento de código en ejecución.

Consejo: use void * cuando no esté seguro de cómo devolver la dirección de la función llamada y escriba el valor en la función de llamada en consecuencia.

Nota: El nombre de la matriz 2-D representa un puntero constante a una matriz (el puntero a una matriz es diferente de un puntero a un entero). Así que lo he escrito en consecuencia. Para obtener información sobre el puntero constante a una matriz, consulte este artículo:

¿Cómo describir el puntero constante a una matriz en C / C ++?

Gracias por el A2A.

Como se señaló en la respuesta de Emilio Garavaglia a ¿Cómo devuelvo una matriz multidimensional usando dos parámetros en C ++ ?, una matriz se puede envolver en un objeto y, por lo tanto, pasar como una sola variable. Esta es la forma idiomática de C ++ de hacerlo.

No hay necesidad ni razón para jugar con punteros o reinventar la matriz. Declarar una matriz en C ++ es simplemente una cuestión de declararla. Si se necesita una matriz dinámica, un std :: vector servirá para aproximadamente el 99% de sus casos de uso. Ambos pueden trivialmente hacerse multidimensionales.

Déjame provocar.

Una matriz multidimensional en C ++ es

std :: array , Filas> x;

Y es solo una variable regular para una declaración de return .

O … ¿te refieres a una matriz C?

En ese caso, no puede porque C no puede pasar la matriz, sino solo punteros.

Pero puede pasar estructuras, así que … simplemente envuélvala en una estructura.

estructura de la matriz {doble m [Filas] [Cols]; } X;

Quien le haya dicho que devuelva un puntero a los punteros … ¡se pierde por completo para qué sirve C ++!

A2A.

Si desea devolver una matriz 2D, tendrá que usar un puntero a un puntero, una alternativa mucho más limpia es:

std :: vector > 2DArray (int h, int w) {

return std :: vector > (h, std: vector (w, 1));
}

Tome la ayuda de este siguiente ejemplo …

Quiero usar una matriz int bidimensional que se devuelve desde una función ¿cómo debo definir el valor de retorno de la función? Usé int ** pero el compilador dio un error:

int ** tableCreator () {
int ** table = new int [10] [10];
para (int xxx = 1; xxx <10; xxx ++) {
para (int aaa = 1; aaa <10; aaa ++) {
tabla [xxx] [aaa] = xxx * aaaa;
}
}
retorno (tabla); // Aquí: no se puede convertir de ‘int (*) [10]’ a ‘int **’
}

¡Puede devolver un puntero a una matriz de punteros que apuntan a otra matriz!

#include
#include

int ** get_matrix (int fila, int col) {
int ** matriz = nuevo int * [10];
para (int i = 0; i matriz [i] = nueva int [col];
}
matriz de retorno;
}

int main () {
matriz = get_matrix (10,10);
//código
//código
// y más código
devuelve 0;
}

More Interesting

Cómo resolver el problema de 'La lista negra' en un CodeSprint reciente de HackerRank

En los primeros días de la informática, ¿por qué tenían que implementar memoria de núcleo de ferrita en lugar de utilizar conjuntos de condensadores?

¿Cómo funcionan los mecanismos del filtro de revisión de Yelp?

¿Cuál es la diferencia entre los métodos de búsqueda y los algoritmos utilizados por los motores de búsqueda de Google, Yahoo y Bing? ¿Cómo lo explicarías de una manera simple?

¿Qué es la estructura de datos, algoritmo en informática? ¿Cuál es la mejor forma en línea para aprenderlo?

¿Cómo realizan las computadoras la multiplicación y la complejidad del tiempo?

He practicado más de 300 preguntas de algoritmos en LintCode y LeetCode. He estado desempleado durante casi 9 meses y obtuve 8 entrevistas y todas fallaron en la prueba de codificación. Todavía no puedo recibir ninguna oferta. ¿Qué tengo que hacer?

¿Por qué usarías una cola en lugar de una lista vinculada? ¿No es una cola una versión peor de una lista vinculada?

¿Puedes ser bueno en la programación pero malo en los algoritmos?

¿Cuál es un ejemplo de un algoritmo de filtro en la selección de funciones en el aprendizaje automático?

¿Cómo diseñaría un algoritmo para clasificar 100 millones de libros y encontrar duplicados funcionales?

¿Dejarías que los algoritmos se intercambiaran por ti cuando estés en el trabajo?

Cómo ser autosostenible solo a través del comercio algorítmico

Cómo elegir métricas de error para el algoritmo de aprendizaje automático

¿Cuáles son los requisitos previos para Introducción a los algoritmos de Thomas Cormen?