有没有办法更有效地从文件中读取二进制双精度到浮点数组?

时间:2016-06-09 00:08:57

标签: c++ performance binary ifstream

有没有更好的方法从文件读取二进制双精度并最终将值放入浮点数向量中,而不是像这样明显的解决方案?

    vector< double > dv( N );

    ifstream inFile( path ); 
    inFile.read( ( char* ) dv.data(), N*sizeof( double ) );
    inFile.close();

    vector< float > fv( dv.begin(), dv.end() ); 

1 个答案:

答案 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();