Guardar un array en un archivo

Iniciado por cNoob, 26 Diciembre 2017, 13:52 PM

0 Miembros y 1 Visitante están viendo este tema.

cNoob

Tengo un problema al tratar de guardar un array en un archivo con la biblioteca fstream, y es que tengo una estructura dinámica que almacena una serie de números y me interesa guardarla de alguna forma, por lo que he decidido meter todos los valores en una estructura con un array (el cual es de tamaño variable, puesto que la cantidad de números que tiene que almacenar varía) y almacenar esta estructura en el fichero.
La estructura es la siguiente:
Código (cpp) [Seleccionar]
long int cantidadAlmacenar = 0;
struct guardarArchivo{
    long int cantidad = cantidadAlmacenar;
    long int numero [cantidad] = {0};
};


Y la funcion que transforma la estructura dinámica en el array (en verdad es un método de una clase)es la siguiente:
Código (cpp) [Seleccionar]
void CCifras::guardarArchivo(void)
{
    struct guardarArchivo guardar;
    struct nodo* guia = comienzo;
    for(int i = 0; i < cantidad; i++)
    {
        guardar.numero[i] = guia.numero;
        guia = guia.siguiente;
    }
    ofstream ficheroEscribir; ficheroEscribir.open ("BaseDatos.dat", ios::out | ios::binary);
    ficheroEscribir.write((char *) &guardar, sizeof(guardar));
    ficheroEscribir.close();
}

Pero esta técnica hace aguas por todas partes (ya la he utilizado y funciona cuando la cantidad de valores a almacenar es fija, pero este no es el caso) y el compilador me da el error: "invalid use of non-static data member" en la linea donde pone
Código (cpp) [Seleccionar]
long int numero [cantidad] = {0};.
El caso, si alguien puede decirme cual es el fallo en mi forma de hacerlo o directamente la forma correcta de hacer lo que quiero se lo agradecería XD
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

ivancea96

Te diría que antes de todo eso, empieces a utilizar la clase vector, de la librería estándar (<vector>).
Es un array de tamaño dinámico. http://www.cplusplus.com/reference/vector/vector/
Un vector almacena cualquier cantidad de elementos, y se pueden eliminar, agregar, y ver cuantos hay.

cNoob

Creo que puede servir para mi programa, pero tengo un par de dudas al respecto:

1)La lista de números que voy a utilizar podría llegar a contener varios miles de valores, consumiría esto muchos recursos del ordenador o produciría un tiempo de ejecución muy largo?

2)Si creo un objeto vector y lo guardo sin más en un fichero, se guardan también sus valores? (lo pregunto por si la clase funciona con algo parecido a estructuras dinámicas y al guardar el objeto tal cual solo se guarda un puntero a donde están almacenados los valores o algo por el estilo, no se si me explico)
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

ivancea96

Un objeto vector tendrás que guardarlo manualmente 8como si fuera el array)

Un vector guarda cualquier tipo. Si guardas el tipo int (4 bytes generalmente), y almacenas 1 millon, pues seran 4.000.000 bytes, 4 MB.
Y en cuanto al tiempo de ejecución, es inevitable. Pero por 1 millón de elementos no tendrás problema.

En fin, pruébalo. Haz pruebas con vector antes de ponerte con los archivos, para ver sus posibilidades y cómo funciona.

cNoob

Lo haré, muchas gracias por la ayuda :D
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."