Boost logo

Boost :

From: farrow_at_[hidden]
Date: 2001-08-09 15:24:54


Alexander, Gary, George,

Thanks for the informative replies.

Doesn't look like combine exists, exactly the way I wanted, but
accumulate seems kinda close. I'm happy to 'plug away' for now.

Rob Farrow
farrow_at_[hidden]

--- In boost_at_y..., Gary Powell <Gary.Powell_at_s...> wrote:
> [Rob Farrow]
> Using STL algorithms...
> I am unable to deduce a way of combining or reducing sequence
> containers into a single result or filtering arbitrary iterators
with
> a predicate. So I have created these...
>
> REDUCE: applies a binary operator where the first argument is the
> current intermediate result and the second is each value in the
> sequence. The result of each function application becomes the new
> result.
>
> Example:
>
> vector<int> nums; //contains { 1, 2, 3 }
> int result = reduce(nums.begin(), nums.end(), plus<int>(), 0);
> //result = 6
>
> [Gary Powell]
> int result = std::accumulate(nums.begin(), nums.end(), 0,
plus<int>());
>
>
> FILTER: a wrapper for an iterator that applies a predicate functor.
> The resulting iterator only stops at objects that pass the
predicate.
>
> vector<int> nums; //contains { 1, 15, 2, 10, 3 }
> int result = reduce(filter(nums.begin(),
> bind2nd(less_than<int>(),10)),
> nums.end(), plus<int>(), 0);
> //result = 6
> [Gary Powell]
>
> vtl::filter_view<vector<int>, int(*)() > filter(nums,
> bind2nd(less_than<int>(),10));
>
> result = std::accumulate(filter.begin(), filter.end(), 0,
plus<int>() );
>
> or use a boost::filter_iterator_generator.
>
>
>
> GUARD: is the complement of FILTER.
> The resulting iterator only stops at objects that FAIL the
predicate.
>
> [Gary Powell]
> Just reverse the test.
>
>
>
> Just some alternatives.
>
> Yours,
> -gary-


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