002
21.05.2008, 11:07 Uhr
RHBaum
|
Der vector der STL ist ein ersatz fuer ein Dynamisches Array .... Also sowas wie: int * Array = new int [1234]; oder eben die malloc schiene aus C
gegenueber sowas hat der vector keinerlei geschwindigkeitsnachteile, wenn man ihn richtig benutzt.
Aber, wohingegen er keine chance beim anlegen hat, ist nen statisches Array. int Array[123];
Das Die Dinger langsam sein sollen, kommt eher von konzeptionellen Dingen. z.b. das man den vector verwendet wenn das ding eigentlich aufn stack passen wuerde ... oder wenn man vorher weiss, wie gross das ding wird, werden kann, und man es nicht richtig initialisiert, sondern den vector das selber ueberlaesst. Unter C wuerd man nie auf den gedanken kommen, wenn man z.b. 1000 ints anlegen muss, das array zuerstmal mit 10 ints erstellen, dann eines mit 20, die vorherigen werte rueberkopieren und weiter anfuegen, dann 40 ... 80 ... bis man mal bei 1000 ankommt.
Nen std::vector<int> Array;
Array.push_back(value); // und das 1000 mal
wuerde z.b genau dies tun ...
Also der Komfort bricht hier dem Unbedarften performancetechnisch das Genick :-) Dazu kommt das was ao schon beschreibt. Vector wird grad von neueinsteigern viel zu oft verwendet, wo ein anderer container bessere leistung erzielen wuerde.
Wenn Du haarstraeubende Beispiele aus der Praxis zum Anschauen haben willst .... Such mal in den C't Archiven. Da gabs mal nen fetten Artikel zu performance zwischen C++, C# und Java. Java und C# hat natuerlich super abgeschnitten :-) Wenn man den C++ code, der die STL verwendet hat, analysiert hat, wusste man auch sofort warum .... Lapidarer kommentar des Autors zu den protesten von C++ Entwicklern: Er habe die Stl so benutzt wie man sie halt üblicherweisse benutzen wuerde. Kein wunder das c++ den ruf geniest, performance zu verschenken, wenn das ueblich ist :-)
Ciao.... |