Muestra las diferencias entre dos versiones de la página.
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. |