
-----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users- bounces@lists.boost.org] On Behalf Of Nathan Ridge Sent: 08 July 2012 15:33 To: Boost Mailing List Subject: Re: [Boost-users] chaining ouput iterator to input iterator
I have a function that transforms a serie of numbers into another serie:
template
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.Coroutine? Is that in boost vault? MM