Jak bezpośrednio odczytać ogromny fragment pamięci do std :: vector?
Mam ogromną ciągłą tablicęx
że jafread
z pliku.
Jak upuścić ten fragment dostd::vector<>
? Innymi słowy, wolę mieć rezultatstd::vector<>
zamiast tablicy, ale chcę, aby wynikowy kod C ++ był tak wydajny, jak ta zwykła wersja C, która upuszcza fragment bezpośrednio do tablicy.
Od przeszukania myślę, że być może będę musiał użyć nowego miejsca w jakiejś formie, ale nie jestem pewien co do kolejności połączeń i kwestii własności. Czy muszę się martwić o problemy z wyrównaniem?
Testuję dla zT = unsigned
, ale oczekuję, że rozsądne rozwiązanie zadziała dla każdej struktury POD.
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 );