std::vector ... 6 Zahlen ermitteln und im Vecotr löschen
-
Bin lediglich Hobbyprogrammierer - also habt Nachsicht:
Mein Programm soll einen Vector mit Zahlen von 1 bis 49 initialisieren
Dann zufällig 6 Zahlen ermitteln und diese (und hier liegt das Problem) im Vector löschen.Mein Programm:
#include <vector> #include <iostream> #include <ctime> using namespace std; int main() { vector<int> liste; srand(time(NULL));; // Zufallszahlen vorbereiten // Liste füllen mit Zahlen von 1 bis 49 for(int i = 1; i <= 49; i++) { liste.push_back(i); } // Zahl ziehen: .... for(int i = 0; i < 6 ; ++i) { vector<int>::iterator it = liste.begin(); // it bei Position: 0 int zufall = rand() % 49 + 1; // zufällige Zahl 1 - 49 it += zufall; // iterator die Position geben cout << *it << endl; // ausgeben liste.erase(it); // löschen } cout << endl; // Leerzeile // nach 6 Zahlen vector nochmals ausgeben .... hat das alles funktioniert ? vector<int>::iterator it; for(it = liste.begin(); it != liste.end(); ++it) { cout << *it << endl; } }Bei der Ausführung gibt er mir gelegentlich (nicht immer) ein Segmention fault. Irgendwo scheine ich Grenzen zu überschreiten - kann mir jemand sagen wo?
Gibt es eine elegantere Lösung das Umzusetzen ?
-
Wenn Du eine Zahl gezogen und gelöscht hast, solltest Du natürlich keine Zufallszahl mehr im Bereich bis 49 ziehen ...
zB:
int zufall = rand() % (49 - i) + 1;
-
Hallo morbidMo,
Willlkommen im C++-Forum.
Belli schrieb:
Wenn Du eine Zahl gezogen und gelöscht hast, solltest Du natürlich keine Zufallszahl mehr im Bereich bis 49 ziehen ...
zB:
int zufall = rand() % (49 - i) + 1;Ist im Prinzip richtig , muss aber heißen:
int zufall = rand() % (49 - i);'zufall' ist ein Index und läuft von 0..48 bzw. 0..48-i.
Gruß
Werner
-
Das stimmt natürlich! Hab mich so auf den von mir auf den ersten Blick gefundenen Fehler gestürzt, dass ich den zweiten Blick zu ungenau gemacht hab.

-
Vielen Dank für die schnelle Hilfe!! Jetzt leuchtet mir das auch ein !
