Boost logo

Boost Users :

Subject: Re: [Boost-users] [Boost.Iterator] transform_iterator equivalent for output iterators
From: Jeff Flinn (jeffrey.flinn_at_[hidden])
Date: 2015-07-31 21:01:01


On 7/31/15 8:40 AM, dariomt wrote:
> Edward Diener <eldiener <at> tropicsoft.com> writes:
>
>>
>> On 7/30/2015 7:06 AM, dariomt <at> gmail.com wrote:
>>> Here is my problem: for any given algorithm that writes its output
> into
>>> an output iterator, I'd like to apply a transformation *before*
> writing
>>> to the output iterator.
>>>
>>> e.g. inside the algorithm the output iterator is dereferenced and
>>> incremented to write each result, typically like this:
>>>
>>> *output++ = ith_result;
>>>
>>> I'd like to wrap the output iterator with a unary function func such
>>> that the effect is equivalent to:
>>>
>>> *output++ = func( ith_result );
>>>
>>> I'm looking at the adaptors in Boost.Iterator but I cannot find a
>>> suitable one.
>>>
>>> Am I missing anything?
>>> Is there a better approach?
>>
>> Can you not use the function_output_iterator to accomplish what you
> want
>> to do ?
>>
>
> IIUC the function_output_iterator "fakes" an output iterator with a
> function object that gets called for each element written to the
> iterator.
>
> I need to wrap *both* an actual output iterator and a function object,
> and I need to apply the function *before* writing to the actual output
> iterator.
>
> Given that the output iterator is written by dereference and assignment,
> I think I would need some kind of proxy reference, that when assigned to
> applies the function before doing the actual assignment.
>
> That looks ugly, so I'm asking here for a more elegant solution :)

how is what you want to do different from:

boost::copy( myrange | transformed(func), outputitr );

Jeff


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