Boost logo

Boost Users :

Subject: Re: [Boost-users] chaining ouput iterator to input iterator
From: Nathan Ridge (zeratul976_at_[hidden])
Date: 2012-07-08 10:33:23


> > > I have a function that transforms a serie of numbers into another
> > serie:
> > >
> > > template <typename InputIterator, typename OutputIterator>
> > > void mytransform( InputIterator begin, InputIterator end,
> > OutputIterator out )
> > > {
> > > }
> > >
> > >
> > > and a 2nd function that calculates the standard deviation of a sample
> > >
> > > template <typename InputIterator >
> > > double stdev( InputIterator begin, InputIterator end)
> > > {
> > > }
> > >
> > > Is there a way to chain these existing functions in order to get the
> > std dev
> > > of the transformed serie, without storing the intermediate numbers?
> > > Maybe with the help of some lazy iterator, or some lazy function?
> >
> > In this particular case, you can use boost::transform_iterator rather
> > than std::transform, as Jeff pointed out.
> >
> > However, this does not resolve the problem in general, which is how to
> > treat the sequence of values a function writes to an output iterator as
> > a range (or pair of iterators) input to another function (without
> > accumulating the elements in a container, of course).
>
> I'm not too sure how to call the transform_iterator in this case.
>
> I have these 2 functions that I need to provide separately because they are
> used separately.
> And I also need a 3rd function, called
>
> double stddev_of_transformed(InputIterator begin, InputIterator end)
> {
> return mytransform(begin, end, boost::transform_iterator( ... ) ); //
> ????
> }

Sorry, I thought by transform() you meant std::transform(). If you have your
own mytransform() function (and you can't replace it with a call to
std::transform()), then boost::transform_iterator may not be applicable. In
that case, your options are 1) accumulate the outputs in a container in
between the two calls, or 2) use a Boost.Context-based solution as I
mentioned before.

Regards,
Nate

                                               


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net