Boost logo

Boost :

Subject: Re: [boost] [algorithm] adjacent_for_each interest?
From: Evgeny Panasyuk (evgeny.panasyuk_at_[hidden])
Date: 2013-02-11 05:09:58


11.02.2013 2:17, Nathan Ridge:

>>
>> P.S. Consider implementation of companion - transform_adjacent.
>> Maybe even consider version which accepts "count of adjacent elements
>> within each iteration" as template non-type parameter.
>> Or maybe choose some another approach involving Boost.Range?
>
> I think a more general approach would be a Boost.Range-style range
> adaptor [1] that presents a view of the range where elements in
> the view are pairs of (references to, if desired) elements in the
> underlying range. You can then use standard algorithms like for_each
> and transform on the adapted range.
>
> I have written such an adaptor in the past and called it
> 'adjacent_paired'. I've also seen (can't remember where) the name
> 'windowed' used for the more general version which presents a view
> of tuples of N adjacent elements.

Yes, I was thinking about something like that - use tuple views.

Just for example(of tuple views):

int arr[] = {0,1,2,3,4,5};

for_each
(
     make_zip_iterator( make_tuple(arr+0, arr+1) ),
     make_zip_iterator( make_tuple(end(arr)-1, end(arr)) ),
     cout << lambda::_1 << " "
);

or

boost::for_each
(
     combine(arr | sliced(0,size(arr)-1), arr | sliced(1,size(arr))),
     cout << lambda::_1 << " "
);

output: (0 1) (1 2) (2 3) (3 4) (4 5)

By the way, is combine in boost/range/combine.hpp in public api? I don't
see it on website.

-- 
Evgeny Panasyuk

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk