Ver Mensaje Individual
  #2  
Antiguo 13-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Isajar Ver Mensaje
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita