stages new c++ multidimensional-array

c++ - new - Fórmula de cálculo de matriz 2D



mongodb project new field (3)

Supongamos que la dirección para A[10][10] es 40000, el doble toma 16 bytes y se usa el direccionamiento de bytes, ¿cuáles son las direcciones para A[40, 50] ?

Solo estoy tratando de calcular un punto simple en 2D y solo quería verificar dos veces que conecté los valores correctos en la ecuación

BA + [n * (i - LBR) + (j - LBC)] * w 40000 +[10*(40-0)+(50-0)]*16 40000+[10*(40)+(50)]*16 40000+[900]*16 = 54400

¿Apliqué la fórmula correctamente aquí? No estaba seguro si conecté los valores correctos?


El significado de la siguiente ecuación:

BA + [n * (i - LBR) + (j - LBC)] * w

Si tiene una matriz A [n] [n] y conoce la dirección de la entrada A [LBR] [LBC] como BA, la dirección de A [i] [j] puede calcularse de la siguiente manera. Asumiendo n = 6,

00 01 02 03 04 05 10 11 12 13 14 15 20 21 22 23 24 25 30 31 32 33 34 35 40 41 42 43 44 45 50 51 52 53 54 55

Supongamos que conocemos la dirección de A [2,1] = 1000. Necesitamos calcular la dirección de A [4,2]. Ahora para llegar a [4,2] desde [2,1], ¿cuántas entradas tendremos que viajar? Por supuesto, como @Deepu especifica, podemos hacerlo de dos maneras, ya sea por filas o por filas. A partir de la ecuación, parece que se ha seleccionado el recorrido en hilera.

22 to 25 (4) 30 to 35 (6) 40 to 42.(3) = 13 entries.

De ahí la dirección de A [4,2] = 1000 + 13 * (numOfbytes por entrada)

Para verificar con la ecuación,

i - LBR = 4 - 2 = 2. j - LBC = 2 - 1 = 1.

Por lo tanto, n*( i - LBR ) + (j - LBC) = 6*2 + 1 = 13.


En C ++, una matriz de 2d es solo una matriz de matrices, por lo que en A la memoria se utiliza para

A[ 0][ 0] A[ 0][ 1] A[ 0][ 2] ... A[ 0][99] A[ 1][ 0] A[ 1][ 1] A[ 1][ 2] ... A[ 1][99] ... A[99][ 0] A[99][ 1] A[99][ 2] ... A[99][99]

donde cada fila simplemente sigue a la anterior en la memoria.

La dirección de un elemento en (row, col) es

(unsigned char *)(&A[0][0]) + (row*row_size + col) * element_size

En su caso, usted sabe que el elemento que está buscando tiene 30 filas más abajo y 40 elementos a la derecha del elemento dado, por lo tanto, la dirección será

40000 + ((40 - 10)*100 + (50 - 10)) * 16

totalizando a 88640.

Puede obtener el mismo resultado restando la dirección relativa del elemento (10, 10) de la dirección dada (para encontrar el inicio de la matriz) y luego agregando la dirección relativa de (40, 50) .


La respuesta depende de si está utilizando ordenamiento mayor de fila o ordenamiento mayor de columna. En el orden principal de la fila, los datos se almacenan en filas. En la columna principal, ordenar los datos se almacenan en columnas. Considere la siguiente matriz 2D para almacenar en la memoria,

11 22 33 44 55 66 77 88 99

En la fila principal, los elementos se almacenan contiguamente como 11,22,33,44,55,66,77,88,99 . En la columna principal, los elementos se almacenan contiguamente 11,44,77,22,55,88,33,66,99 .