我有一个来自文件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 );