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