May 05, 2013 Regarding partition_copy | ||||
---|---|---|---|---|
| ||||
Splitting a range in two according to a predicate is a common enough need. How do you translate this C++/STL idiom to D/Phobos? vector<int> source_data; ... vector<int> good_stuff, bad_stuff; partition_copy(begin(source_data), end(source_data), inserter(good_stuff, end(good_stuff)), inserter(bad_stuff, end(bad_stuff)), is_good); If this is not handy to implement with the current Phobos, is it worth adding a similar function to Phobos? Thank you, bye, bearophile |
May 05, 2013 Re: Regarding partition_copy | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 5/5/13 7:22 AM, bearophile wrote:
> Splitting a range in two according to a predicate is a common
> enough need. How do you translate this C++/STL idiom to D/Phobos?
>
>
> vector<int> source_data;
> ...
> vector<int> good_stuff, bad_stuff;
> partition_copy(begin(source_data), end(source_data),
> inserter(good_stuff, end(good_stuff)),
> inserter(bad_stuff, end(bad_stuff)),
> is_good);
>
>
> If this is not handy to implement with the current Phobos, is it
> worth adding a similar function to Phobos?
>
> Thank you,
> bye,
> bearophile
Yah, I've been thinking of adding a new category of functions that generate multiple ranges and conversely merge multiple ranges into one.
A possibility here is to define segregate!pred(range) that takes a predicate and a range and returns a tuple of two ranges (for true and false values of the predicate). The two ranges can be consumed at different rates etc.
That won't work with input ranges though.
Andrei
|
Copyright © 1999-2021 by the D Language Foundation