Hilfe zum Verständnis von Vectoren



  • Hallo,
    Ich möchte einen Würfel 10x werfen und mir in einem Vector notieren wie oft eine Augenzahl vorkommt.

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main(){
    
    	int counter = 0;
    	std::vector<int> x;
    	for (counter; counter < 10; counter++){
    		unsigned int die1 = 1 + rand() % 6; // rolling a dice 10 times
    		switch (die1){
    		case 1: x.push_back(0); break; //Storing how often a number is rolled
    		case 2: x.push_back(1); break; 
    		case 3: x.push_back(2); break;
    		case 4: x.push_back(3); break;
    		case 5: x.push_back(4); break;
    		case 6: x.push_back(5); break;
    		default: cout << "Something went wrong"; break;
    		}
    
    	} // end of for
    
    	cout << "1 was rolled: " << x[0] << " times" << endl
    		<< "2 was rolled: " << x[1] << " times" << endl
    		<< "3 was rolled: " << x[2] << " times" << endl
    		<< "4 was rolled: " << x[3] << " times" << endl
    		<< "5 was rolled: " << x[4] << " times" << endl
    		<< "6 was rolled: " << x[5] << " times" << endl;
    
    	system("PAUSE");
    	return 0;
    }
    

    Das ist mein Code, ich weiß das ich bei push_back ein neues Element im Vektor erstelle und meine Ausgabe somit falsch ist weil sie die Augenzahl in Wurf X ausgibt.

    Wie kann ich also einen Wert in ein schon vorhandenes Element addieren?
    mfg



  • Hallo,

    ich würde sagen, dass du einen Vektor mit 6 Elementen anlegst und für die gewürfelte Augenzahl einfach sagst.

    std::vector<int> vec( 6, 0);
    
    int augenzahl = ... // von 1 bis 6
    
    vec[ augenzahl - 1]++;
    

    Edit:
    Ich empfehle dir die C++11 Zufallszahlengeneratoren zur Simulation von Würfel, z.B. das hier.

    Gruß,
    -- Klaus.



  • Statt vector würde ich std::array<int, 6> count{} empfehlen. Dann kannst du dir per count[die1-1]++; merken wann immer ein Wurf kam (was aber auch mit vector geht). rand() sollte mit srand mit einer Zufallszahl initialisiert werden, obwohl rand generell nicht so super ist.
    Außerdem kannst du Werte im Code direkt nutzen. Statt switch (die1) x.push_back kannst du direkt x.push_back(die1-1); schreiben. Statt der ganzen cout-Anweisungen geht da auch eine Schleife von 1 bis 6.


Anmelden zum Antworten