antred
Lt. Commander
- Registriert
- Juni 2010
- Beiträge
- 1.288
Yuuri schrieb:Also ich bekomme erst bei 100.000 Elementen einen Geschwindigkeitsvorteil des Arrays um 1 ms.Bei 1.000.000 sind es immerhin schon 9 ms Vorsprung für das Array, allerdings möchte ich damit nicht arbeiten.
So "langsam" ist ein vector also nicht und die STL gibt es ja nun schon einige Jahre und es wurde bestimmt auch daran optimiert.Code:#define MEM_SIZE 100000 void FillVector( Stopwatch &s, vector<int> &r ) { s.Start(); for( int i = 0; i < MEM_SIZE; i++ ) r.push_back( 0 ); s.Stop(); } void FillArray( Stopwatch &s, int *r ) { s.Start(); for( int i = 0; i < MEM_SIZE; i++ ) r[i] = 0; s.Stop(); } int main() { Stopwatch s; vector<int> v; int *a = new int[MEM_SIZE]; FillVector( s, v ); cout << "std::vector took " << s.Difference() << " ms" << endl; FillArray( s, a ); cout << "array took " << s.Difference() << " ms" << endl; system( "pause" ); return 0; }![]()
Ich bin bezüglich vector-Performance auf deiner Seite, aber ich würde mit solchen künstlichen Benchmarks sehr vorsichtig sein, da derart trivialer Code selten repräsentativ für tatsächlich produktiv eingesetzten Code ist.
Obendrein wundert es mich sogar, daß in deinem Beispiel der vector nahezu genau so schnell wie das Array ist, denn du hast den vector etwas ungünstig eingesetzt.
Normalerweise würde man, wenn bei einem vector schon von vorneherein weiß, mit wie vielen Elementen er bestückt werden soll, gleich dafür sorgen, daß er auf die nötige Kapazität hat ... also r.reserve( MEM_SIZE );
Sonst würde der vector nämlich mehrmals seinen internen Speicher vergrößern müssen - also größeres Array allokieren, Inhalt des alten in das neue, größere Kopieren und dann altes Array löschen. Und da wäre meine Erwartungshaltung dann schon, daß der vector im Vergleich zum Array etwas langsamer wäre.