Pasando matrices multidimensionales en c ++

Video: Tutorial de C++ en Español -33- Arreglos Multidimensionales

Si usted tiene que pasar una matriz multidimensional a una función, las cosas pueden ser un poco peludo. Esto se debe a que no tiene tanta libertad de dejar fuera de los tamaños de matriz como se hace con las matrices unidimensionales. Suponga que tiene esta función:

int addAll (int MyGrid [5] [6]) {int x, y-int suma = 0-de (x = 0- x lt; 5- x ++) {for (y = 0- y lt; 6- y ++) {suma + = MyGrid [x] [y] -}} retorno SUM-}

Hasta ahora, la cabecera de la función está bien porque estamos indicando explícitamente el tamaño de cada dimensión. Sin embargo, es posible que desee hacer esto:

int addAll (int MyGrid [] []) {

o tal vez pasar los tamaños, así:

int addAll (int MyGrid [] [], filas int, int columnas) {

Pero, por desgracia, cuando se compila cualquiera de estas dos líneas, se obtiene este error:

declaración de `MyGrid` como arraymust multidimensionales tienen límites para todas las dimensiones excepto en la primera

Es extraño: El compilador le está diciendo que usted debe enumerar explícitamente todas las dimensiones, pero está bien si se deja el primero en blanco, al igual que con matrices unidimensionales.

Por lo que significa esta locura compilará:

int addAll (int MyGrid [] [6]) {

¿Qué hay sobre eso? La razón es que el compilador trata matrices multidimensionales de una manera especial. Una matriz multidimensional no es realmente una matriz de dos dimensiones, por ejemplo- sino que es una matriz de una matriz.

Por lo tanto, en el fondo C ++, el compilador trata la declaración MyGrid [5] [6] como si fuera MyGrid [5]donde cada elemento de la matriz es en sí mismo una matriz de tamaño 6. Y eres libre de no especificar el tamaño de una matriz unidimensional. Pues bien, los primeros paréntesis representan la porción unidimensional de la matriz. Lo que puede dejar ese espacio en blanco, que pueda con otras matrices unidimensionales.

Pero entonces, después de eso, usted tiene que dar la matriz límites. Y tal vez sólo un poco artificial. Pero es C ++, y es la regla: Puede dejar en blanco la primera dimensión en una cabecera de la función, pero debe especificar los tamaños de dimensiones restantes.

Video: 11. Arreglos Bidimensionales (Matrices) / C++

Cuando se usan matrices multidimensionales, a menudo es más fácil si se piensa en ellos como una matriz de matrices. A continuación, se utiliza una typedef de modo que, en lugar de ser una matriz de matrices, es una matriz de algún tipo definido por el usuario, tales como GridRow. Cualquiera de las siguientes cabeceras de función, por ejemplo, es confuso:

int addAll (int MyGrid [] [6]) {int addAll (int MyGrid [] [6], int count) {

Aquí está nuestra recomendación: Utilice una typedef. Así que aquí hay una forma más limpia:

Video: 56. Programación en C - Arreglos - Concepto de arreglos bidimensionales (Tablas o matrices)

typedef int GridRow [6] -INT addAll (GridRow MyGrid [], int size) {int x, y-int suma = 0-de (x = 0- x lt; x Tamaño- ++) {for (y = 0- y lt; 6- y ++) {suma + = MyGrid [x] [y] -}} retorno SUM-}

los typedef línea define un nuevo tipo llamado GridRow. Este tipo es un conjunto de seis números enteros. Luego, en la función, estás pasando una serie de GridRows.

Usando esto typedef es el mismo que el simple uso de dos soportes, excepto que hace hincapié en que estás pasando una matriz de una matriz - es decir, una matriz en la que cada miembro es en sí mismo una matriz de tipo GridRow.

Artículos Relacionados