Post oder Prefix beim Vektorenablaufen mit einem Iterator - wie entscheiden?
-
Servus,
ich rumpel gerade über ein paar Iterator-Beispiele und mir fiel auf, dass einige it++ oder ++it schreiben. Das variiert und meine Google-Suche bringt mir Ergebnisse, die nicht eindeutig sind - nach welchen Kriterien entscheidet ihr da?
-
Ist bis zu einem gewissen Grad halt Geschmackssache, aber ich nehme immer ++i. ++i ist im Gegensatz zu i++ eindeutig (und bei meinem Code kann ich mich dann darauf verlassen, dass, wo i++ steht, i++ auch nötig war) und im Zweifelsfall vermeidet man durch ++i sogar eine Kopie von i.
-
Ich nehme immer ++i
außer seltenen Fällen, wie zu Fasching
while(*dst++=*src++);und theoretisch zu Karneval
//hier käme jetzt eine Variante, wo man auf Listeniteratoren löscht //und zugleich weiterspringt, aber zu Karneval habe ich immer Fasching
-
++i vermeidet eine Kopie, daher ++i nehmen, wo möglich.
-
Allgemein lässt sich sagen:
Prefix ist immer mindestens genau so schnell wie Postfix, manchmal aber auch schneller.Im Ernstfall erzeugt Postfix eine temporäre Kopie, wodurch es mehr Speicher braucht und langsamer ist, weshalb Prefix in der Regel effizienter ist.
Gleich gut wird es nur, wenn der Compiler erkennt, dass die Kopie verworfen wird und sie deshalb wegoptimiert.Prefix ist also immer besser als Postfix (außer man benötigt die Kopie tatsächlich, siehe "Fasching"^^), da man sich hier nicht auf die Fähigkeiten des Compilers verlässt.