Cita:
Empezado por Isajar
Buenas , quisiera saber si se pueden guardar contenedores de stl en archivos binarios, es decir si se podria hacer algo como:
...
|
Hola Isajar.
Si, te hice un ejemplo simple para que revises:
Código:
#include <iostream>
#include <vector>
#include <fstream>
#include <cstdlib>
#include <ctime>
#define MAX 100
using namespace std;
int main()
{
// cargar MAX números aleatorios en v1
vector <int> v1;
srand((unsigned)time(NULL));
v1.clear();
v1.resize(MAX);
for(int i=0;i<MAX;i++) v1[i] = rand()%100;
// guardar v1 en archivo
ofstream wfile("prueba.dat", ios::out | ios::binary | ios::trunc);
wfile.write(reinterpret_cast<char*>(&v1[0]), MAX * sizeof(int));
wfile.close();
// leer MAX números en v2
vector <int> v2;
ifstream rfile("prueba.dat", ios::in | ios::binary);
// obtener cantidad de int del archivo [*]
rfile.seekg(0, ios::end);
int sz = rfile.tellg() / sizeof(int);
rfile.seekg(0, ios::beg);
v2.resize(sz * sizeof(int));
rfile.read(reinterpret_cast<char*>(&v2[0]), v2.size());
rfile.close();
// mostrar contenido obtenido en v2
for (int i=0;i < MAX; i++) cout << v2[i] << " ";
cin.get();
return EXIT_SUCCESS;
}
[*] En el ejemplo es obvio que la cantidad de enteros guardados en
prueba.dat y que serán leídos en v2 es
MAX; pero podría suceder que no supieras con antelación cuantos elementos existen.
Saludos.