Boost logo

Boost :

Subject: Re: [boost] RFC: Sequence Properties and Boost Algorithm/Functional
From: Marshall Clow (mclow.lists_at_[hidden])
Date: 2010-01-22 18:24:32


On Jan 22, 2010, at 2:02 PM, Grant Erickson wrote:

> For a recent project, I needed to inquire about a sequence of objects and
> make a determination as to whether the sequences were:
>
> * Increasing
> * Strictly Increasing
> * Decreasing
> * Strictly Decreasing
>
> Looking through STL, Boost documentation, Boost sources and headers and the
> Boost mailing lists I was able to find neither an existing algorithm or
> stateful unary predicate functor for accomplishing this for a pair of input
> iterators. However, I was a bit surprised considering that this seems like a
> sequence property query that would tend to come up fairly often and serve a
> general utility. Did I just fail to form the proper search/query or am I
> overestimating the general utility?

I've got this floating around from a while back (as well as the other three - increasing, decreasing, and strictly_decreasing ).
Maybe these should go in the algorithms library:

template<typename T>
bool is_strictly_increasing ( T* begin, T* end ) {
// Empty sequences are strictly increasing
        if ( begin == end )
                return true;

        T* iter = begin;
        T val = *iter++;
        
        while ( iter != end ) {
                if ( ! ( *iter > val ))
                        return false;
                val = *iter++;
                }
        return true;
        }

template<typename I>
bool is_strictly_increasing ( I begin, I end ) {
// Empty sequences are strictly increasing
        if ( begin == end )
                return true;

        I iter = begin;
        typename I::value_type val = *iter++;
        
        while ( iter != end ) {
                if ( ! ( *iter > val )) // if ( val >= *iter )
                        return false;
                val = *iter++;
                }
        return true;
        }

-- Marshall


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