if in for-Anweisung
-
Es ist bis heute kein brauchbares C++-Tutorial im Netz bekannt.
1. Geh' auf amazon.de
2. Kauf' dir den Primer
-
SeppJ schrieb:
Es ist bis heute kein brauchbares C++-Tutorial im Netz bekannt. Tutorials werden meistens von fortgeschrittenen Anfängern geschrieben, wenn sie selber glauben, sie wären gut und müssten ihr Wissen mit der Welt teilen.
So was habe ich befürchtet, schon allein, weil es irgendwie "danach riecht", dass jeder Tutorial-Autor seine Weisheiten als die Alleingültigen darstellt, die Tutorials aber dennoch irgendwie Unterschiede aufweisen, obwohl sie sich auf gemeinsame Standards berufen.
Arcoth schrieb:
1. Geh' auf amazon.de
2. Kauf' dir den PrimerIch vermute, du meinst den von Stanley B. Lippman ?!
Gruß
ds
-
Finnegan schrieb:
2. Für dem Wahnsinn anheim Gefallene:
for (int i = 0; i < 100; i += 2 - std::min(i % 5, 1)) { }Nein Wahnsinn wäre sowas:
for (int i = 0; i < 100; [&i]{ if (i%5 == 0) i+=2; else ++i; }()) { // ... }EDIT: wobei man unten ja noch schnell nachvollziehen kann was das bedeutet / tut

-
Richtiger Wahnsinn geht so:
i += 2 - (i % 5 != 0)Alles andere brancht immer noch.
-
Es geht auch elegant:
for (int i = 0; i < 100; ++i) { if (i % 5 == 0) ++i; }
-
Finnegan schrieb:
3. Einfach in den Schleifenkörper schreiben:
for (int i = 0; i < 100; ) { if (i % 5 == 0) i += 2; else i++; }Ich persönlich würde Variante 3 empfehlen. Es ist nichts verwerfliches dabei, das Hochzählen der Laufvariable im Schleifenkörper zu erledigen - besonders wenn es ein bedingtes Hochzählen ist. Ebenso fördert es die Lesbarkeit und macht deine Intentionen besser klar.
coder777 schrieb:
Es geht auch elegant:
for (int i = 0; i < 100; ++i) { if (i % 5 == 0) ++i; }Finde ich die schlechteste Lösung:
for (int i = 0; i < 100; ++i) { machWasmitZBArray(a[i]); if (i % 5 == 0) ++i; unuebersichtlicherCode(); nach3MonatenIstAufgefallenDassAmEndeNochWasGemachtWerdenMuss(a[i]); // Bähm! }
-
Jockelx schrieb:
Finde ich die schlechteste Lösung:
Macht aber keinen Sinn. Wenn du Finnegans Code so einrahmen würdest, würde das genauso passieren (sogar eher).
Und wer weiß, vielleicht will man in a[i] sogar in dem Fall den um 1 erhöhten Wert zum Überspringen des Feldes. Da ist 1 oder 2 schlimmer.Der Punkt: Je weniger Zeilen, desto übersichtlicher.
-
Ich meinte sowohl Finnegans 3.Lösung als auch deine (mit dem selben Argument), als schlechteste Lösung.
Lohnt aber auch nicht wirklich darüber zu streiten.
Ich würde den Index jedenfalls wenn es irgendwie geht nur im Kopf ändern und nicht im Rumpf.
-
Was ist denn mit sowas hier?
for(int i = 0; i < N; i++) { if ( i%5 == 0 ) continue; // do shit... }
-
Skym0sh0 schrieb:
Was ist denn mit sowas hier?
for(int i = 0; i < N; i++) { if ( i%5 == 0 ) continue; // do shit... }Damit Jockelx keinen Code reinklemmen kann
for(int i = 0; i < N; i++) {if(i%5==0)continue; // do shit... }
-
for (int i = 0; i < N; i++) if (i % 5) DoShit();?
-
Uih.
"Ich möchte um x um 2 inkrementieren, wenn x durch 5 glatt teilbar ist, ansonsten soll um 1 inkrementiert werden."
gemacht zu
"Beispiel: ich möchte die nicht durch 5 teilbaren Zahlen haben."
Das gewinnt natürlich.