Stefan Hundhammer schrieb:
On Monday 06 October 2003 15:31, Sebastian Huber wrote:
Das setzt allerdings voraus, dass std::vector<T> intern zusammenhaengende Felder benutzt, was aber glaube ich jede Implementierung so macht.
Das halte ich für eine sehr gewagte Annahme. Das wird früher oder später kläglich scheitern!
Also so gewagt ist das nicht! Wichtige STL Implementierungen (Hewlett-Packard, ist bei MS Visual Studio 6.0 dabei; GNU + Hewlett-Packard + SGI, bei gcc 3.3) verwenden ein zusammenhaengendes Feld. Wenn die Informatiker in Zukunft nicht etwas voellig Revolutionaeres im Hinblick auf Vektorimplementierungen herausfinden, dann wird sich das auch nicht so schnell aendern. Denn warum soll man ein seit Jahren bewaertes Verfahren grundsaetzlich ueber Bord werfen?
Falls sich das irgendwie machen läßt, würde ich empfehlen, die Funktion so aufzusplitten, daß sie genau ein Element bearbeitet, und dann STL-Iteratoren benutzen - das ist die wirklich saubere Lösung.
Falls genau diese Funktion benutzt werden muß (etwa weil Sourcen nicht verfügbar), bleibt IMHO nur, die Daten wirklich in ein neu angelegtes C-Array umzukopieren - nicht besonders elegant oder effizient, aber sicher.
Da C++ so designed wurde, dass es moeglichst gut mit C Bibliotheken umgehen kann, ist es doch eigentlich nur konsequent std::vector direkt zu benutzen. Bei dem Umweg ueber Felder hat man ja wieder den ganzen Verwaltungskram am Hals. Sachen wie read( in, &v.front(), v.size()); write( out, &v.front(), v.size()); sind einfach praktisch und effizient. Ciao