File I/O : std::list oder std::vector oder std::deque ??????? (Performance)
-
asc schrieb:
Und wenn du schon unbedingt mit Stringzeigern optimieren willst, kannst du gleich auf char* Pointer wechseln.
Ich gehe zwar davon aus dass das nicht an mich gerichtet war, dennoch: das hatte ich als erstes vorgeschlagen

Die anderen Vorschläge (vector + shared_ptr bzw. deque bzw. ptr_vector) hab' ich einfach gemacht weil ich *weiss* dass mit den STL Implementierungen die üblicherweise verwendet werden (MS, GCC, STLport) diese 3 sinnvolle Kandidaten sind, auf jeden Fall besser als std::vectorstd::string.
OK, std::liststd::string ist vermutlich inetwa gleich schnell, das hatte ich übersehen/vergessen (ich brauche std::list so selten dass ich oft nicht daran denke, selbst wenn random access nicht gebraucht wird). Sei hiermit hinzugefügt.
-
hustbaer schrieb:
Die anderen Vorschläge (vector + shared_ptr bzw. deque bzw. ptr_vector) hab' ich einfach gemacht weil ich *weiss* dass mit den STL Implementierungen die üblicherweise verwendet werden (MS, GCC, STLport) diese 3 sinnvolle Kandidaten sind, auf jeden Fall besser als std::vectorstd::string.
Gut, habt gewonnen. Auch wenn ich mich Frage ob in diesen Anwendungsbeispiel nicht dadurch das Strings nur einmal geschrieben und ausgelesen werden müssen ein zusätzliches new/delete performancetechnisch nicht ebenso langsam ist (Werde ich vielleich irgendwann mal testen). Sofern nicht eindeutig der Flaschenhals daran hängen wird werde ich auch immer Objekte oder Smartpointer (wie von dir angegeben) rohen Zeigern vorziehen.
Was die Implementierungen eines String angeht bin ich aber dennoch anderer Meinung. Mir ist ehrlich gesagt auch voll und ganz egal wie der String im Detail implementiert ist, ich bin und bleibe ein Anhänger des Ansatzes: Programmiere immer gegen die Schnittstelle, niemals gegen die Implementierung.
cu André