|
Boost : |
From: Andrey Semashev (andysem_at_[hidden])
Date: 2008-04-02 11:31:53
Dean Michael Berris wrote:
> On Wed, Apr 2, 2008 at 12:23 AM, Steven Watanabe <watanabesj_at_[hidden]> wrote:
>> AMDG
>>
>> Andrey Semashev wrote:
>>> Hi,
>>>
>>> I propose to add a simple helper function to create an iterator range
>>> of boost::transform_iterators. This would effectively create a view
>>> over a different range or a container.
>>>
>>> Currently this is possible to do with considerable code duplication:
>>>
>>> make_iterator_range(
>>> make_transform_iterator(vec.begin(), fun),
>>> make_transform_iterator(vec.end(), fun));
>>>
>>> Here "fun" could be a rather complex lambda or bind expression. What I
>>> propose is to wrap these calls into a simple generator make_view. The
>>> above code would look much better:
>>>
>>> make_view(vec.begin(), vec.end(), fun);
>>>
>>> or
>>>
>>> make_view(vec, fun);
>>>
>>> I've attached a sample implementation of the make_view function. Do
>>> you think this could be useful?
>> I want this utility on a regular basis.
>>
>
> I like this too. Should this be in put in Boost.Range? Or should this
> be a Utility?
>
Added Ticket #1756.
I think, Boost.Range is a better place because the view is an iterator
range after all. Moreover, as I pointed out in the ticket, a more
elaborate implementation could optimize function object duplication that
we get with transform_iterator, thus using only Boost.Range components
and making a pure extension of the library. However, I have no strong
feelings about this.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk