txt. Datei in vector<voctor<double>> speichern



  • Hallo,

    ich versuch aus einer Text Datei die Werte in eine Matrix zu speichern. Der Teil des Codes sieht so aus:

    ifstream Eingabe1("Delta.txt");
    vector <vector<double> > c5;
    if (Eingabe1) {
    for ( unsigned t = 0; t < instance.numTracks(); ++t) {
    for ( unsigned i = 0; i < instance.numTrains(); ++i) {

    Eingabe1 >> c5[t][i] ;
    c5[t][i] = c5[t][i] + 0.1;
    }
    }
    }

    wenn ich das so mache bekomme ich eine Segmentation Fault Meldung. Kann es daran liegen, dass ich nicht sage wie groß c5 ist? Oder mache ich hier garnicht das was ich möchte?

    Danke!



  • Ja. Wenn du auf ein Array/Vector mittels [] zugreifst, muss das Element existieren, da nur ein neuer Wert zugewiesen wird. Schau dir doch mal push_back an. Dann mache dich mit std::vector vertraut.





  • Hallo,

    danke euch erst mal!
    Ich habe mal folgendes versucht. Aber irgendwie funktioniert das nicht

    ifstream Eingabe1("Delta.txt");

    if (!Eingabe1) {
    cerr << "Datei kann nicht geöffnet werden" << endl;
    exit(-1);
    }

    vector<vector<double>> c5;
    while (Eingabe1) {
    string line;
    getline(ifs, line);
    istringstream iss(line);
    vector<double> values;
    istream_iterator<double>(iss);
    copy(istream_iterator<double>(iss),
    istream_iterator<double>(),
    back_insert_iterator<vector<double> >(values));
    if (values.size() > 0) c5.push_back(values);

    for ( unsigned t = 0; t < instance.numTracks(); ++t) {
    for ( unsigned i = 0; i < instance.numTrains(); ++i) {

    Eingabe1 >> c5[t][i] ;
    c5[t][i] = c5[t][i] + 0.1;
    }
    }
    }

    }



  • Was funktioniert nicht? Und verwende absofort bitte die Code-Tags, die findest du unter den Smileys, oder

    am Anfang und Ende deines Codes schreiben. Gib uns einen Fehlerbericht und was du machen willst.



  • Du hast die Werte doch gerade eingelesen, warum dann noch die for-Schleife?



  • Tugba schrieb:

    Aber irgendwie funktioniert das nicht

    Jetzt wissen wir genau was dich stört. Irgendwie.

    Okay, Ironie beiseite, bitte lies dir die mit wichtig gekennzeichneten Threads hier im Forum durch. Das sollte man grundsätzlich in jedem Forum machen, bevor man zum ersten Mal postet, wenn man sich nicht als absoluter Noob outen möchte 😉



  • Nur so am Rande:

    Tugba schrieb:

    back_insert_iterator<vector<double> >(values)

    kannst du durch

    back_inserter(values)
    

    ersetzen. back_inserter ist ein Funktionstemplate, über welches der Container-Typ automatisch vom Compiler deduziert wird. Die Rückgabe ist in diesem Fall auch nur ein back_insert_iterator<vector<double> >-Objekt.


Anmelden zum Antworten