ファイルから取得した巨大な連続配列x
がfread
あります。
このチャンクを にドロップするにはどうすればよいstd::vector<>
ですか? 言い換えれば、私は結果をstd::vector<>
配列ではなく入れることを好みますが、結果の C++ コードは、チャンクを配列に直接ドロップするこの単純な C バージョンと同じくらい効率的であることを望んでいます。
調べてみると、placement-new を何らかの形で使用する必要があるのではないかと思いますが、呼び出しの順序と所有権の問題についてはよくわかりません。また、アライメントの問題について心配する必要はありますか?
with をテストしていますが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<T> v
// without calling a gazillion push_backs() or copies ?!?
delete[] x;
fclose( fp );