【发布时间】:2013-01-01 01:33:39
【问题描述】:
我有一个巨大的连续数组x,我来自一个文件fread。
如何将此块放入std::vector<>?换句话说,我更喜欢将结果放在 std::vector<> 而不是数组中,但我希望生成的 C++ 代码与将块直接放入数组的普通 C 版本一样高效。
通过四处搜索,我想我可能不得不以某种形式使用placement-new,但我不确定调用顺序和所有权问题。另外,我需要担心对齐问题吗?
我正在使用 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 );
【问题讨论】:
-
您有什么理由不直接将文件读取到向量中?
-
@ahenderson - 因为我没有意识到你可以 - Joachim 在下面的回答看起来不错
标签: c++ c++11 placement-new