
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