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