Vector probleme mit dem Inhalt
-
Ich hab nen Vector von 1 bis einschl. 26. 2iese Zahlen lasse ich shufflen und ausgeben, aber der letzt ist immer 0 und dann fehlt zb 14 als zahl.
so ist der code:vector<int> numbers; // vector<int>::size_type for(n = 1; n <= 26;++n) { numbers.push_back(n); } int shufflemaster; MARK: if (randgen == 1) { shufflemaster=generator; } else shufflemaster = rand()%500; for(;shufflemaster>0;shufflemaster--) { std::random_shuffle(numbers.begin(), numbers.end()); } int index = 0; int zahl = numbers[index]; stringstream converting; for (;index<=26;) { //cout<<numbers[index]<<"\n"; converting << numbers[index]; converting >> lettersaver[index]; converting.clear(); index = index + 1; }also numbers[26] ist immer 0
WARUM
-
du hast nur 26 zahlen reingetan, also numbers[0] bis numbers[25].
-
Wie beheb ich das [... hust ...]
wenn ich bei der for schleife die 26 zur 27 mache hab ich zahlen von eins bis 27 drin, dass ist nicht gewollt.
-
stringstream converting; for (int index=0;index<=26;index++) { //cout<<numbers[index]<<"\n"; int zahl = numbers[index]; converting << numbers[index]; converting >> lettersaver[index]; converting.clear(); }
-
Da stellt sich mir ma wieder die Frage, wie viel du von dem Code eigtl verstehst...
einmal ne for-schleife richtig genutzt, einmal eigtl nur ne while schleife genommen und index = index + 1 geschrieben etc...vector<int> numbers; for(int i=1; i <= 26; ++i) { numbers.push_back(n); } int shufflemaster; //MARK: ?? /* in fkt auslagern:*/ if (randgen == 1) //? { shufflemaster=generator; } else shufflemaster = rand()%500; /*bis hier, also: int shufflemaster = GetShuffleCount(); oder so in etwa - sieht man hier schlecht, wie das zusammenhängt ~~*/ for(;shufflemaster>0;shufflemaster--) { std::random_shuffle(numbers.begin(), numbers.end()); } //int index = 0; nicht hier... //int zahl = numbers[index]; ?? //stringstream converting; brauchst du hier auch nicht unbedingt... for(int index=0; index <= 25; ++index) //[0,25] => 26 { stringstream converting; //hier reicht das ja... converting << numbers[index]; converting >> lettersaver[index]; // index = index + 1; nicht hier.... }würde noch viel klarer werden, wenn du für die länge ne Konstante nehmen würdest...
dann wäre es einmal
i(1); i != MAX_LENGTHund einmal
i(0); i != MAX_LEGNTH-1bb
-
1. MARK: wird nicht benutzt, war nur kurz zum degug da, kann also weg.
2. for(i=0;i<=26;i++) mache ich nie sondern schreibe immer i = i + 1; weil ich mit so besser im klaren darüber bin ,wo ich die 1 addiere.
3. Meine Variablen habem immmer einen schreklichen Namen, weil mir nichts besseres einfällt (siehe shufflemaster
)Und dann noch zu dem verstehen... Ich Weiß was der Code macht, denn kopiert ist er nicht sonders selbst geschrieben, den Beweis kannst du dir selbst liefern...
( ganz typisch für mich: unwichtiger code, Schlimme formatierung | schwer zu durschauen, kein erfahrener würde mir so etwas anbieten)außerdem wird es immer besser und übersichtlicher.
Nur das unnötige Verkomplizeren muss noch etwas warten.Das mal DAZU
-
Tim06TR unlogged schrieb:
2. for(i=0;i<=26;i++) mache ich nie sondern schreibe immer i = i + 1; weil ich mit so besser im klaren darüber bin ,wo ich die 1 addiere.
Hm. Ich würde aber lernen, mit dem Ausdruck
i++oder hier besser++iumzugehen. Den wirst du sehr oft wieder antreffen. Bei Iteratoren kannst du zum Beispiel nicht immeri = i + 1schreiben.Tim06TR unlogged schrieb:
3. Meine Variablen habem immmer einen schreklichen Namen, weil mir nichts besseres einfällt (siehe shufflemaster
)"shufflemaster" ist doch kreativ...

Variablennamen findest du am einfachsten heraus, indem du dir überlegst, welche Aufgabe die Variable hat. Meistens findet man dann akzeptable Bezeichner.Was bezweckst du eigentlich hiermit?
for(;shufflemaster>0;shufflemaster--) { std::random_shuffle(numbers.begin(), numbers.end()); }Die Sequenz wird nicht zufälliger, indem du sie mehrmals nacheinander mischst.
-
1. MARK: wird nicht benutzt, war nur kurz zum degug da, kann also weg.
Wie kann man nen Label zum debuggen nutzen? Ich glaube, du hast da was falsch gemacht : D
2. for(i=0;i<=26;i++) mache ich nie sondern schreibe immer i = i + 1;
wenn du meinst...
allerdings:/*1.*/ for(int i(0); i != 26; ++i) { ... } /*2.*/ for(int i(0); i != 26; i = i + 1) { ... } /*3.*/ for(int i(0); i != 26; ) { ... i = i + 1; } /*4.*/ int i; for(i = 0; i != 26; ) { ... i = i + 1; } /*5.*/ int i(0); for(; i != 26; ) { ... i = i + 1; }findest du wirklich die letzte variante am hübschesten? Oo
ich find sie am hässlichsten...
weil 3 zeilen zu lesen, bis ich die schleife (bzw. deren bedingungen alleine) an sich verstanden habe - bei 1. ist es nur eine zeileund 2. find ich auch nich besser als 1.
also, wenn du 5. magst, dann nimm vll eher ne while schleife
bb
hmm... Jz hab ich so viel nebenbei gemacht, dass Nexus wieder mal schneller war - aber da hab ich wenigsten nich so viel zu tippen
