Search code examples
c++stlcontainersstl-algorithm

C++ STL: Passing an empty container to lower_bound


Is the behavior for passing an empty container to std::lower_bound defined?

I checked cppreference.com and an old version of the C++ standard that I found online, but couldn't find a definite answer.

The cppreference.com documentation for std::deque::erase has a sentence

The iterator first does not need to be dereferenceable if first==last: erasing an empty range is a no-op.

I miss something like this for std::lower_bound and other algorithms.


Solution

  • Cppreference on the return value of std::lower_bound(first, last):

    "[it returns] Iterator pointing to the first element that is not less than value, or last if no such element is found.".

    (emphasis mine)

    In an empty range, there will be no elements that satisfy the criteria, so last will be returned.

    Concluding from this, applying std::lower_bound (and similar) on the empty range is well-defined. It does nothing and returns last, which is equal to first.