Effizienz Array versus Vector
-
habe grad mal den Debug Modus abgeschaltet. wusste bisher nicht, das es sowas gibt. jetzt ist die Laufzeit identisch. Kann man da irgendwo was nachlesen, wie, warum das so ist?
-
Das hängt sicher mit verschiedenen Asserts zusammen, die in std::vector eingebaut sind.
-
Optimizer schrieb:
Das hängt sicher mit verschiedenen Asserts zusammen, die in std::vector eingebaut sind.
weiter kann vector::iterator in der Debug Version auch recht schön eine Klasse sein - das kann beim debuggen sinn machen
weiters wird bei der debug version wahrscheinlich nix geinlinet, etc.
die vector klasse hat nunmal mehr code als ein simples array braucht
-
jetzt hab ich doch noch mal ne Frage: Ist es möglich ein bedingtes Makefile anzulegen, und über den make Befehl eine Option zu übergeben, so dass der Sourcecode mal im DEBUG Modus compiliert wird und sonst optimiert?
Vielen Dank!
-
Hat std::vector eigentlich eine Indexprüfung? Wenn nicht, in welcher Lib gibt es ein Array mit Indexprüfung? In boost-array scheinbar auch nicht.
EDIT:
Irrtum, boost hat doch eine Indexprüfung, bei der Methode at().
-
vector hat auch at und wirft afair out_of_range.
-
Jo.
-
Naja, aber wer benutzt schon at? Man müsste die Indexprüfung global ein und ausschalten können.
-
Ich finds ehrlich gesagt auch nicht besonders schön. Vor allem hätte man die Prüfung beim operator[] mit assert machen können, dann fällt die Belastung im Release-Build weg. Und bei at() kann man ja ganz "korrekt" mit Exceptions arbeiten.
Kann mir mal btw. einer kurz erklären wie das mit Objekten abläuft? Wird da der Standardkonstruktor aufgerufen bei einem Pinguin-Array?EDIT: Anscheinend ruft std::vector bei Klassentypen den Standardkonstruktor auf und bei primitiven Typen setzt es den Wert auf 0. Ist meine Beobachtung richtig?
-
vector macht immer T(). bei int() hat das den effekt von =0.
-
Optimizer schrieb:
EDIT: Anscheinend ruft std::vector bei Klassentypen den Standardkonstruktor auf und bei primitiven Typen setzt es den Wert auf 0. Ist meine Beobachtung richtig?
Nein. Nur die Methode resize ruft zum Popularisieren den Standardctor des Typs auf.