Como ler diretamente um grande pedaço de memória em std :: vector?

Eu tenho uma enorme matriz contíguax que eufread de um arquivo.

Como faço para largar esse pedaço em umstd::vector<>? Em outras palavras, eu prefiro ter o resultado para estar emstd::vector<> em vez da matriz, mas eu quero que o código C ++ resultante seja tão eficiente quanto essa versão C simples que coloca o fragmento diretamente na matriz.

A partir da pesquisa, acho que posso ter que usar o posicionamento de novo de alguma forma, mas não tenho certeza sobre a sequência de chamadas e problemas de propriedade. Além disso, preciso me preocupar com problemas de alinhamento?

Eu estou testando comT = unsigned, mas espero que uma solução razoável funcione para qualquer struct 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 );

questionAnswers(2)

yourAnswerToTheQuestion