Как напрямую прочитать огромный кусок памяти в std :: vector?

У меня есть огромный непрерывный массивx что яfread из файла.

Как мне бросить этот кусок вstd::vector? Другими словами, я предпочитаю, чтобы результат был вstd::vector а не массив, но я хочу, чтобы результирующий код C ++ был столь же эффективным, как и эта простая C-версия, которая помещает кусок прямо в массив.

Из поисков вокруг, я думаю, что мне, возможно, придется использовать размещение новых в некоторой форме, но я 'Я не уверен в последовательности звонков и проблем с владением. Кроме того, мне нужно беспокоиться о проблемах выравнивания?

Я проверяю сT = unsigned, но я ожидаю, что разумное решение будет работать для любой структуры 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 v
// without calling a gazillion push_backs() or copies ?!?

delete[] x;
fclose( fp );

Ответы на вопрос(2)

Ваш ответ на вопрос