Probleme beim Gebrauch eines Zweidimensionaler Vectors
-
Ich hatte zuerst einen vector<int> elements;
Der wurde so benutztelements[zeit(s)gerundet], darin wird die Anzahl gespeichert...
...und in eine Datei geschrieben, dass so dann so aus:
Zeit | Anzahl
1 34
2 3245
3 4354usw.
Nun wollte ich die Zeit zusätzlich zur ersten Variante auf eine Nachkommastelle runden, daher brauche ich so einen vector
elements[Zeit(sekunde)][zeit(1. nachkommastelle], darin wird die anzahl gespeichert
Die Ausgabe soll wie folgt sein:
1.0 34
1.1 45345
1.2 45
1.3 345Hier meine Deklaration
vector< vector <int> > velements;
Nun hab ich aus meiner alten funktion wo velements[i] verwendet wurde immer velements[0][i] gemacht, da ja der vector nun zweimal verwendet wird (einmal auf sekunden gerundet, einmal auf die erste Nachkommastelle).
Aber in der Datei steht auf einmal nur noch Müll:for(string Read; getline(file, Read);) if(Read.substr(51,3) != "Muhkuh") { time.SetReadString(Read); // Runden und Sekund zuordnen velements[0][time.GetRoundedTimeDifference()]++; cnt++; } // Werte in Datei schreiben for(int i=0; i<=velements.size()-1; ++i) if(velements[0][i] != 0) outputfile<<i<<":"<<velements[0][i]<<'\n';
Ist da ein offensichtlicher Fehler? Kann man all die Vectormethoden (resize(), clear() usw.) weiterhin normal nutzen oder kann es daran liegen?
-
Uiiiiiii.
Auf Vektoren soll man nie direkt mit [] zugreifen. Immer mit der Methode .at( int ). Genauso bei allen anderen STL Klassen (Templates).
Also:
mein_vektor.at(2).at(3) = 4;Mkay?
Mfg,
Alex
-
Das bringt eine abnormal program termination sonst nichts
Ich hab ja schon gesucht aber humme hats auch per vector[a][b] gemacht...
-
achja bitte hier nichts mehr posten, die probleme bekomme ich in den griff wenn ich weiß wie das mit dem vector funktioniert, d.h. mein eigentliches problem hat sich verlagert (daher auch der andere thread)
-
Komisch, bei mir hats bisher so immer funktioniert.
-
Gast996622 schrieb:
Uiiiiiii.
Auf Vektoren soll man nie direkt mit [] zugreifen. Immer mit der Methode .at( int ). Genauso bei allen anderen STL Klassen (Templates).
Also:
mein_vektor.at(2).at(3) = 4;man soll nichts, man kann aber, wenn man auf std::out_of_range wartet