Herramientas de usuario

Herramientas del sitio


cpp-avanzado:arreglos-c-plano

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Última revisión Ambos lados, revisión siguiente
cpp-avanzado:arreglos-c-plano [2017/12/06 12:45]
santo
cpp-avanzado:arreglos-c-plano [2017/12/06 12:46]
santo
Línea 8: Línea 8:
   * Equivale a tener un vector unidimensional,​ y acceder en $iM + j$, o en general para el arreglo ''​int a[N1][N2][N3][N4]''​ digamos, acceder a $a[i][j][k][l]$ es igual que acceder directamente a la posición $iN_2N_3N_4 + jN_3N_4 + kN_4+l$, y el compilador lo hace automático (esta es la razón por la cual te deja que sea dinámico el tamaño de la primera dimensión, pero no las demás).   * Equivale a tener un vector unidimensional,​ y acceder en $iM + j$, o en general para el arreglo ''​int a[N1][N2][N3][N4]''​ digamos, acceder a $a[i][j][k][l]$ es igual que acceder directamente a la posición $iN_2N_3N_4 + jN_3N_4 + kN_4+l$, y el compilador lo hace automático (esta es la razón por la cual te deja que sea dinámico el tamaño de la primera dimensión, pero no las demás).
   * Si son locales, usan memoria de stack, en resumen, tener un arreglo local (sin static) y gigante puede traer problemas, a diferencia de vector.   * Si son locales, usan memoria de stack, en resumen, tener un arreglo local (sin static) y gigante puede traer problemas, a diferencia de vector.
-  * No se pueden asignar con =, a diferencia de lo que ocurre con vector. Sin embargo si son parte de un struct, el struct se asigna bien, así que envolver un arreglo en un struct lo hace asignable. Nunca tiene "​operator <" ni "​operator ==" sin embargo((O mejor dicho, "tiene pero es el de punteros",​ asi que usarlo es casi con certeza un bug)), a diferencia de vector que ya lo tiene.+  * No se pueden asignar con =, a diferencia de lo que ocurre con vector. Sin embargo si son parte de un struct, el struct se asigna bien, así que envolver un arreglo en un struct lo hace asignable. Nunca tiene "​operator <" ni "​operator ==" sin embargo((O mejor dicho, "tiene pero son los de punteros",​ asi que usarlo es casi con certeza un bug)), a diferencia de vector que ya lo tiene.
   * No se pueden pasar nunca por valor (por copia), cuando escribimos la sintaxis de "pasar un arreglo por valor",​ C++ lo transforma por abajo silenciosamente a pasar un puntero en su lugar. El "​efecto práctico para el programador"​ simplificado es como si siempre se pasaran por referencia.   * No se pueden pasar nunca por valor (por copia), cuando escribimos la sintaxis de "pasar un arreglo por valor",​ C++ lo transforma por abajo silenciosamente a pasar un puntero en su lugar. El "​efecto práctico para el programador"​ simplificado es como si siempre se pasaran por referencia.
   * Son más eficientes que los vector (y la diferencia aumenta más cuantas más dimensiones tenga el arreglo, comparado contra el vector de vector de vector correspondiente). Por esto y porque la sintaxis queda más compacta, suelen ser una elección mucho más práctica que vector para tablas multidimensionales.   * Son más eficientes que los vector (y la diferencia aumenta más cuantas más dimensiones tenga el arreglo, comparado contra el vector de vector de vector correspondiente). Por esto y porque la sintaxis queda más compacta, suelen ser una elección mucho más práctica que vector para tablas multidimensionales.
cpp-avanzado/arreglos-c-plano.txt · Última modificación: 2017/12/06 12:48 por santo