Struct mit Vectoren binär speichern und laden



  • Auf http://www.boostpro.com/download gibts nen Installer, mit dem die Installation problemlos klappen sollte.



  • Den habe ich eben installier, ist aber für VS. 🙂
    Naja, mach ich es eben einzeln...



  • Vll hilft dir das

    template <class T>
    void PackVector(ostream* pFile, vector<T>* pData)
    {
    	if (pFile && pData)	
    		for (int i = 0; i < pData->size(); i++)
    			pFile->write((char*) pData->at(i), sizeof(T));
    }
    


  • template <class T>
    void SaveVector(ostream& File, const vector<T>& Data)
    {
      File.write((char*) &Data[0], sizeof(T)*Data.size());
    }
    

    Geht natürlich nur mit eingebauten Typen.



  • Vll hilft dir das

    template <class T>
    void PackVector(ostream* pFile, vector<T>* pData)
    {
    	if (pFile && pData)
    	{	
    		for (int i = 0; i < pData->size(); i++)
    			pFile->write((char*) &pData->at(i), sizeof(T));
    	}
    }
    


  • hmmmm schrieb:

    template <class T>
    void SaveVector(ostream& File, const vector<T>& Data)
    {
      File.write((char*) &Data[0], sizeof(T)*Data.size());
    }
    

    Geht natürlich nur mit eingebauten Typen.

    Wird da alles abgespeichert oder nur das erste Element? (wegen Data[0])



  • Beliaz schrieb:

    Wird da alles abgespeichert oder nur das erste Element? (wegen Data[0])

    Alles:

    File.write((char*) &Data[0], sizeof(T)*Data.size());

    &Data[0] ist der Zeiger auf das erste Element.



  • Da er vector<string> hat reicht das nicht. Für den string braucht ihr auch noch eine Serialisierungsfunktion.
    Macht mal. 😉



  • warum eigentlich

    include <stdio.h>
    #include <vector> 
    
    struct Dat{
          std::vector <std::string> Name;
          std::vector <std::string> Vorname;
          std::vector <std::string> Adresse;
          std::vector <int> PLZ;
          std::vector <std::string> Ort;
          int Zähler;
    
    } Data;
    

    und nicht

    include <stdio.h>
    #include <vector>
    using namespace std;
    
    struct Dat{
          std::string Name;
          std::string Vorname;
          std::string Adresse;
          int PLZ;
          std::string Ort;
    };
    
    typedef DatVec std::vector<Dat>;
    DatVec Data;
    

    würde das nicht von der Datenbündelung her wesentlich mehr Sinn machen? Dein Zähler fällt weg, dafür gibts std::vector<Dat>::size(), zwei freie Funktionen die operator<< und >> auf Dat und DatVec für ifstream und ofstream überladen sollten dann doch genügen? Bin unsicher, habe bisher selten mit binärer speicherung gearbeitet ... Vermutlich müsstest du dann wohl sowas wie string-size,char[] wegschreiben und einlesen?



  • padreigh schrieb:

    würde das nicht von der Datenbündelung her wesentlich mehr Sinn machen?

    Nicht nur würde, ist definitiv sinnvoller. 👍


Anmelden zum Antworten