有没有更好的方法从文件读取二进制双精度并最终将值放入浮点数向量中,而不是像这样明显的解决方案?
vector< double > dv( N );
ifstream inFile( path );
inFile.read( ( char* ) dv.data(), N*sizeof( double ) );
inFile.close();
vector< float > fv( dv.begin(), dv.end() );
答案 0 :(得分:2)
您根本不需要单独的std::vector<double>
。
您可以使用手动阅读循环:
std::vector<float> fv;
fv.reserve(N);
std::ifstream inFile(path);
double d;
while (inFile.read((char*)&d, sizeof(d)))
fv.push_back(static_cast<float>(d));
inFile.close();
或者,您可以使用std::istream_iterator
直接从std::vector<float>
填充std::ifstream
:
class readDoubleToFloat {
double data;
public:
friend std::istream& operator>>(std::istream &is, readDoubleToFloat &val) {
is.read((char*)&(val.data), sizeof(double));
return is;
}
operator float() const { return static_cast<float>(data); }
};
std::ifstream inFile(path);
std::vector<float> fv;
fv.reserve(N);
std::copy(
std::istream_iterator<readDoubleToFloat>(inFile),
std::istream_iterator<readDoubleToFloat>(),
std::back_inserter(fv));
inFile.close();