Vektor-Array in Datei speichern
-
Ich habe einen Vektor, der als Elemente wieder Vektoren beinhaltet. DIese sind jedoch unterschiedlich lang(!):
[cpp]std::vector< std::vectory< int > > OverlordVector; std::vector<int> minivector; for (i = 0; i < 20000; i++) { minivector.push_back(i) } OverlordVector.push_back(minivector); [/cpp]Wie kann ich diesen (Overlord-)Vektor jetzt in ne Datei schreiben (ASCII oder Binary), und ihn später auch wieder leicht auslesen?
ANGs_Pino
-
Wenn es als ASCII geschrieben werden darf, könntest Du z.B. die geschachtelten Vektoren immer in eine Zeile packen.
-
ANGs_Pino schrieb:
Ich habe einen Vektor, der als Elemente wieder Vektoren beinhaltet. ...
Wie kann ich diesen (Overlord-)Vektor jetzt in ne Datei schreiben (ASCII oder Binary), und ihn später auch wieder leicht auslesen?ASCII sollte zunächst die erste Wahl sein (weil viel einfacher)
das geht z.B. so:
#include <fstream> #include <algorithm> // copy, swap #include <iterator> // ostream_iterator #include <iostream> #include <vector> std::ostream& save( std::ostream& out, const std::vector< std::vector< int > >& v ) { out << v.size() << std::endl; for( std::vector< std::vector< int > >::const_iterator i = v.begin(); i != v.end(); ++i ) { out << i->size() << std::endl; std::copy( i->begin(), i->end(), std::ostream_iterator< int >( out, " " ) ); out << std::endl; } return out; } std::istream& load( std::istream& in, std::vector< std::vector< int > >& v_ ) { std::vector< std::vector< int > > v; std::size_t n; in >> n; // Anzahl der vector<int> for( std::size_t m; n && in >> m; --n ) { std::vector< int > mini; for( int x; m && in >> x; --m ) mini.push_back( x ); v.push_back( mini ); // oder: v.push_back( std::vector< int >() ); swap( v.back(), mini ); } if( in ) // Lesen war ok ... swap( v_, v ); // .. dann übernehmen return in; } int main() { using namespace std; std::vector< std::vector< int > > OverlordVector; // OverlordVector füllen ... { // -- Speichern ofstream output("overlord.txt"); if( save( output, OverlordVector ) ) cout << "korrekt gespeichert " << endl; } // -- Laden ifstream input("overlord.txt"); if( load( cin, OverlordVector ) ) cout << "Gelesen .. " << OverlordVector.size() << " Vektoren" << endl; return 0; }
-
Werner_logoff schrieb:
if( load( cin, OverlordVector ) ) // Zeile 48.. muss natürlich
if( load( input, OverlordVector ) )heißen.