Chris Smith on Fri, 19 Mar 2004 16:30:11 -0600 (CST)


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

[ALACPP] copy_if?


So, I was coding late one night, and I wanted something like Smalltalk's
"select:" method. For those of you who aren't familiar with Smalltalk,
it basically allows you to create a select from a collection those
elements which meat a criteria (when thrown throw a single argument
block they evaluate to true... this is the equivalent of a Predicate in
the C++ world). You get back a new collection which contains just the
elements that meet the criteria.

I figured there had to be something like this in the STL, but
surprisingly couldn't find anything. I had a number of near misses, but
it seemed this would be a common enough case that it would actually make
it in.

I ended up coding up the following:

template<typename InputIterator, typename OutputIterator,
         typename Predicate>
inline OutputIterator copy_if(InputIterator first, InputIterator last,
                              OutputIterator result, Predicate pred)
{
    //we could use foreach, but that would require
    //creating another predicate for the code inside the while
    //and I'm far too lazy for that
    while (first != last) {
        if (pred(*first)) {
            result++ = *first;
        }
        ++first;
    }
    return result;
}

It seems to work for me. Anyone have thoughts as to:

a) If there is something in the STL that does this just as well as my
copy_if, and I'm just woefully ignorant.

b) Why this would not be included in the STL, or added into boost
already.

c) Any mistakes I made in my code. ;-)

-- 
Chris Smith <Chris.Smith@xxxxxxxxxxxx>
_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp