Probleme beim Gebrauch eines Zweidimensionaler Vectors



  • Ich hatte zuerst einen vector<int> elements;
    Der wurde so benutzt

    elements[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 4354

    usw.

    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 345

    Hier 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


Anmelden zum Antworten