Wie kann man einen riesigen Teil des Speichers direkt in std :: vector einlesen?
Ich habe eine riesige zusammenhängende Reihex
dass ichfread
aus einer Datei.
Wie lege ich dieses Stück in einstd::vector<>
? Mit anderen Worten, ich ziehe es vor, das Ergebnis zu habenstd::vector<>
anstatt des Arrays, aber ich möchte, dass der resultierende C ++ - Code so effizient ist wie diese einfache C-Version, die den Block direkt in das Array legt.
Ich glaube, ich muss beim Durchsuchen in irgendeiner Form die Option "Placement-New" verwenden, bin mir aber hinsichtlich der Reihenfolge der Anrufe und der Eigentumsverhältnisse unsicher. Muss ich mich auch um Ausrichtungsprobleme kümmern?
Ich teste für mitT = unsigned
Ich erwarte jedoch, dass eine vernünftige Lösung für jede POD-Struktur funktioniert.
using T = unsigned;
FILE* fp = fopen( outfile.c_str(), "r" );
T* x = new T[big_n];
fread( x, sizeof(T), big_n, fp );
// how do I get x into std::vector<T> v
// without calling a gazillion push_backs() or copies ?!?
delete[] x;
fclose( fp );