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
cpp-avanzado:arreglos-c-plano [2017/12/06 12:46]
santo
cpp-avanzado:arreglos-c-plano [2017/12/06 12:48] (actual)
santo
Línea 11: Línea 11:
   * 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.
-  * Idea de explicación: ​En señar ​la idea de hacer el mapeo de índices con un #define (cosa que sirve por sí misma igualmente para hacer cosas como tener un arreglo que va de -10 a 10), para asi tener #define tabla(i,j) arreglo[(i)*M+(j)] , y luego explicar que eso "ya viene hecho" en C++ en forma de arreglos de C plano.+  * Idea de explicación: ​Enseñar ​la idea de hacer el mapeo de índices con un #define (cosa que sirve por sí misma igualmente para hacer cosas como tener un arreglo que va de -10 a 10), para asi tener #define tabla(i,j) arreglo[(i)*M+(j)] , y luego explicar que eso "ya viene hecho" en C++ en forma de arreglos de C plano.
   * Desventaja de los arreglos de C plano: No hacen chequeos de rangos en runtime con la opción -D_GLIBCXX_DEBUG,​ a diferencia de todas las cosas de la STL que sí lo hacen.   * Desventaja de los arreglos de C plano: No hacen chequeos de rangos en runtime con la opción -D_GLIBCXX_DEBUG,​ a diferencia de todas las cosas de la STL que sí lo hacen.
   * Otra desventaja es no tener .size(), y así tener que conocer y pasar el N a mano de ser necesario.   * Otra desventaja es no tener .size(), y así tener que conocer y pasar el N a mano de ser necesario.
   * Uso con sort: sort(v, v+N) , o su equivalente sort(&​v[0],​ &v[N]) , ya que son punteros y no hay .begin() ni .end() que sepan el tamaño N real del arreglo.   * Uso con sort: sort(v, v+N) , o su equivalente sort(&​v[0],​ &v[N]) , ya que son punteros y no hay .begin() ni .end() que sepan el tamaño N real del arreglo.
cpp-avanzado/arreglos-c-plano.1512564370.txt.gz · Última modificación: 2017/12/06 12:46 por santo