mercredi 5 août 2015

std::transform cannot handle out of range error [on hold]

I found that std::transform() asserts for out of range iterator error, if source container size is greater than destination container. for example,

list<int> source = { 1, 2, 3, 4 , 5, 6, 7, 8, 9, 10 };
list<int> dest = { 1, 2, 3, 4, 5 };

std::transform(source.begin(), source.end(), dest.begin(), predfn);

So i have written following wrapper over std::transform()

template<class Source, class Dest, class PredFn>  
    void TRANSFORM_SAFE(Source& src, Dest &dest, PredFn fn)
    {
        int sizeoffset = src.size();
        if (src.size() > dest.size())
            sizeoffset = dest.size();
        std::transform(std::begin(src), std::next(std::begin(src),sizeoffset), std::begin(dest), fn);
    }

Please share your thought on same.

Aucun commentaire:

Enregistrer un commentaire