2016-11-28 5 views
1

Ich versuche Zeile für Zeile in einer TXT-Datei zu lesen, wobei jede Zeile eine andere Anzahl von Elementen haben kann. Ich fand Vektoren von Vektoren, aber ich kann nicht herausfinden, warum meins nur auf den ersten Vektor innerhalb des Vektors schreibt. Alle anderen sind leer.Probleme mit C++ Vektor von Vektoren

Hier ist der Code-Snippet in den Daten zu lesen:

vector<vector<int>> all(numverts); 
for (int i = 0; i <= (numverts - 1); i++) { 
    // reads a line of data 
    vector<int> edges; 
    int connect; 
    while (filein >> connect) { 
    edges.push_back(connect); 
    } 
    all[i] = edges; 
    edges.clear(); 
} 
+3

'während (filein >> connect)' stoppt, nachdem die ganze Datei gelesen wurde. –

+0

Wie kann ich einstellen, um bei jeder neuen Zeile zu stoppen? –

+1

Nur ein allgemeiner Kommentar - es lohnt sich, sich mit 'clang-format' mit Ihrem Code-Editor zu beschäftigen. Sie können die gesamte Datei mit einem Tastendruck in Ihren bevorzugten Codierungsstil formatieren. Im Ernst, es ist wahrscheinlich meine Lieblingsbeschäftigung bei der Programmierung in C++. –

Antwort

5

Sie können getline verwenden und eine stringstream. Auf diese Weise wird jede Zeile der Datei separat gelesen und dann in den Vektor eingespeist (über einen Stringstream).

vector<vector<int> > all(numverts); 
for(int i = 0; i < numverts; i++) 
{ 
    std::string line; 
    std::getline(filein, line); 
    std::stringstream lineStream(line); 
    int connect; 
    while(lineStream >> connect) 
    { 
     all[i].push_back(connect); 
    } 
} 
+1

Vielen Dank! Ich hatte nichts von Stringstream gehört. Das hat perfekt funktioniert. Ich bin froh, neue Dinge zu lernen. –

Verwandte Themen