int Matrix aus Datei einlesen und pro Zeile ein Objekt erstellen
-
Hallo zusammen,
ich hoffe jemandem ist so kurz vor Weihnachten langweilig und kann mir kurz sagen was ich falsch macheDie Überschrift sagt eigentlich alles. Folgende Datei ist gegeben:
25 17 10 189 10 15 10 162 5 16 10 171 10 15 12 180 15 9 11 108 10 7 28 207 8 7 16 99 10 6 16 90 25 10 18 225 25 12 18 243 10 5 40 315 60 40 5 243 5 25 30 810 50 1 60 72
Ich möchte pro Zeile ein Objekt erstellen, mit der jeweiligen Zahl als Attribut.
Das ist mein code:typedef unsigned int uint; void read(string filename) { ifstream str (filename.c_str()); string line; while (getline(str, line)) { istringstream is(line); uint _gewicht,_nutzen,_anzVor,_anzKna; //Wenn ich diese Zeile auskommentiere läuft das Programm //ansonsten nicht is >> _gewicht >> _nutzen >> _anzVor >> _anzKna; Paket temp; temp.setValues(_gewicht,_nutzen,_anzVor,_anzKna); rucksack.pakete.push_back(temp); //Hier habe ich nur was probiert //is.str(""); //is.clear(); // Clear state flags. //is.seekg(0); } }
Villeicht ist der Ansatz auch falsch bzw. nicht optimal. Aber mit fällt leider nichts besseres ein.
Vielen dank schonmal
-
@Philipp2706 sagte in int Matrix aus Datei einlesen und pro Zeile ein Objekt erstellen:
rucksack
#include <cstdlib> #include <iostream> #include <fstream> #include <vector> #include <iterator> struct Paket { int gewicht, nutzen, anzVor, anzKna; }; struct Rucksack { std::vector<Paket> pakete; }; std::istream& operator>>(std::istream &is, Paket &paket) { Paket temp; if (is >> temp.gewicht >> temp.nutzen >> temp.anzVor >> temp.anzKna) paket = temp; return is; } int main() { char const *filename = "test.txt"; std::ifstream is{ filename }; if (!is.is_open()) { std::cerr << "Couldn't open \"" << filename << "\" for reading :(\n\n"; return EXIT_FAILURE; } Rucksack rucksack; rucksack.pakete = std::vector<Paket>{ std::istream_iterator<Paket>{ is }, std::istream_iterator<Paket>{} }; }
und fertig ist der Lack.