vendredi 26 août 2016

when to prefer for-loop over std::transform or vise-versa

I would like to understand when it is more practical to use std::transform and when a old fashioned for-loop does the job better

This is my code with a for loop (I want to combine two vectors into a complex vector). Pretty easy to write and understand.

    vector<double> vAmplitude = this->amplitudeData(N);
    vector<double> vPhase = this->phaseData(N);
    vector<complex<double>,fftalloc<complex<double> > > vComplex(N);
    for (size_t i = 0; i < N; ++i)
    {
        vComplex[i] = std::polar(vAmplitude[i], vPhase[i]);
    }

This is my std::transform code

    vector<double> vAmplitude = this->amplitudeData(N);
    vector<double> vPhase = this->phaseData(N);
    vector<complex<double>,fftalloc<complex<double> > > vComplex;
    std::transform(
                begin(vPhase), end(vPhase), begin(vAmplitude),
                std::back_inserter(vComplex),
                [](double p, double a) { return std::polar(a, p); });

Note that vComplex is allocated without size, so I wonder when the allocations happends. Also I do not understand why in the lambda expression p and a must be reversed to their usage.

Aucun commentaire:

Enregistrer un commentaire