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

Steven Davidson srd4121 en njit.edu
Lun Abr 30 20:20:22 CEST 2012


Hola User,

On 4/30/2012 10:55 AM, User wrote:
> Hola a todos,
>
> Quiero guardar la información proveniente de un fichero de texto a un
> array de doubles. Ejemplo de datos de entrada provenientes del
> fichero de texto:
>
> 12.34
> 23.45
> 45.67
> 34.43
> 0.121
>
> El caso es que no siempre vendrá el mismo número de filas en el
> fichero de texto, por lo que la longitud del array de doubles será
> variable.
>
> ¿Cómo puedo implementar una solución de la manera más limpia y
> sencilla posible en C++ estándar?
>

Bueno, la forma más "sencilla", pero quizá menos optimizada, sería 
leyendo el fichero para ir contando cada carácter de fin-de-línea, que 
por lo nos muestras cada número está en cada línea. Así tendrás la 
cantidad de números para que puedas crear el array dinámico con la 
cantidad necesaria.

La otra solución sería usar alguna clase-plantilla dinámica, como puede 
ser 'vector' o 'list'. Por ejemplo,

vector< double > listaDoubles;
ifstream ifs( "datos.txt" );

double fAux;

ifs >> fAux;
listaDoubles.push_back( fAux );
ifs >> fAux;
listaDoubles.push_back( fAux );
...

Si no quieres o no puedes usar clases plantillas, entonces recrea su 
funcionalidad usando arrays dinámicos, aunque aconsejo usar 'realloc()' 
en lugar de 'new[]', para este caso. Esto es porque 'realloc()' puede 
ensanchar el array sin modificar su contenido original. Por ejemplo,

double *pDoubles = NULL;
int nCant = 0;

// Aumentamos el array
pDoubles = (double *) realloc( pDoubles, ++nCant * sizeof(double) );

ifstream ifs( "datos.txt" );
ifs >> pDoubles[nCant-1];

// Aumentamos el array
pDoubles = (double *) realloc( pDoubles, ++nCant * sizeof(double) );
ifs >> pDoubles[nCant-1];
...


Espero que esto te oriente.

Steven





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