[C con Clase] Array dinámico en C++ estándar

User usuarioanonimomysql en gmail.com
Mar Mayo 1 22:36:33 CEST 2012


Perfecto Steven,

Muchas gracias por tu rápida respuesta. Lo pondré en práctica.

Saludos.

El 1 de mayo de 2012 21:47, Steven Davidson <srd4121 en njit.edu> escribió:

> Hola User,
>
>
> On 5/1/2012 2:21 PM, User wrote:
>
>> Hola de nuevo,
>>
>> He realizado este pequeño programa para probar la alternativa que no
>> usa clases plantillas:
>>
>> #include <iostream>
>> #include <stdio.h>
>> #include <stdlib.h>
>>
>
> Deberías acostumbrarte a los nombres correctos de estos ficheros
> estándares de cabecera de C++:
>
> #include <cstdio>
> #include <cstdlib>
>
> Aunque creo que no necesitas <cstdio>.
>
>
>  #include <fstream>
>>
>> using namespace std;
>>
>> int main()
>> {
>>
>
> [CORTE]
>
> Recuerda que debes liberar la memoria previamente adjudicada por
> 'realloc()'. Escribe:
>
> free( pDoubles );
>
>
>      return 0;
>> }
>>
>> Imaginemos ahora que necesito que el array de doubles sea
>> bidimensional, es decir, sabemos que va a tener dos columnas, pero un
>> número indeterminado de filas.
>>
>> ¿Cómo podría implementarlo?
>>
>>
> Si sabes que van a ser dos números por elemento, entonces tienes dos
> posibles soluciones:
>
> 1. Crea un array de 'double' con el doble de la cantidad de elementos que
> necesitas. Por ejemplo,
>
>
> double *pDoubles = NULL;
> int nCant = 0;
>
> pDoubles = (double *) realloc( pDoubles, ++nCant * 2 * sizeof(double) );
> ...
> Y luego, para acceder a un elemento, doblamos el índice:
>
> pDoubles[2*5] = -1.023;
> pDoubles[2*5+1] = 6.7031;
>
> Se trata del 6º elemento - de índice 5, pero realmente se trata de los
> elementos de índices 10 y 11 en nuestro array.
>
>
> 2. Crea un array de un array de 'double'. Esto es,
>
> typedef double coordenada[2];
> ...
> coordenada *pDoubles = NULL;
> int nCant = 0;
>
> pDoubles = (coordenada *) realloc( pDoubles, ++nCant * sizeof(coordenada)
> );
> ...
> Para acceder a un elemento, usamos el índice para 'pDoubles' y otro para
> la "columna":
>
> pDoubles[5][0] = -1.023;
> pDoubles[5][1] = 6.7031;
>
> Como puedes ver, creamos un tipo que realmente es un array de 2 'double',
> para usarlo en el array dinámico de 'coordenada'.
>
>
> Si quieres, puedes crear un array dinámico de arrays dinámicos de
> 'double'. Por ejemplo,
>
> double **pDoubles = NULL;
> int nCant = 0;
>
> pDoubles = (double **) realloc( pDoubles, ++nCant * sizeof(double *) );
> pDoubles[i] = (double *) realloc( pDoubles, 2 * sizeof(double) );
>
> pDoubles = (double **) realloc( pDoubles, ++nCant * sizeof(double *) );
> pDoubles[i] = (double *) realloc( pDoubles, 2 * sizeof(double) );
> ...
> El acceso a un elemento es el de un array bidimensional:
>
> pDoubles[5][0] = -1.023;
> pDoubles[5][1] = 6.7031;
>
>
>
> Espero que esto te oriente.
>
> Steven
>
>
> ______________________________**_________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/**mailman/listinfo/cconclase_**
> listas.conclase.net<http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net>
> Bajas: http://listas.conclase.net/**index.php?gid=2&mnu=FAQ<http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120501/b6f18402/attachment.html>


Más información sobre la lista de distribución Cconclase