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 = unsignedIch 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 );

Antworten auf die Frage(2)

Ihre Antwort auf die Frage