Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
abs
Expand Minimize
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

Predicate Version of upper_bound 

Illustrates how to use the predicate version of the upper_bound Standard Template Library (STL) function in Visual C++.


template<class ForwardIterator, class T, class Compare>
   inline orwardIterator upper_bound(
      ForwardIterator First,
      ForwardIterator Last,
      const T& Value,
      Compare Compare
   )

NoteNote

The class/parameter names in the prototype do not match the version in the header file. Some have been modified to improve readability.

The upper_bound algorithm returns the last location in the sequence that value can be inserted such that the order of the sequence [First..Last) is maintained. upper_bound returns an iterator positioned at the location that value can be inserted in the range [First..Last), or returns Last if no such position exists. This version assumes the range [First..Last) is sorted sequentially using the compare function.

// upper_boundPV.cpp
// compile with: /EHsc
// Illustrates how to use the predicate version
// of the upper_bound function.
//
// Functions:
//    upper_bound : Return the upper bound within a range.

// disable warning C4786: symbol greater than 255 character,
// okay to ignore
#pragma warning(disable: 4786)

#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>

using namespace std;


int main()
{
    const int VECTOR_SIZE = 8 ;

    // Define a template class vector of int
    typedef vector<int > IntVector ;

    //Define an iterator for template class vector of strings
    typedef IntVector::iterator IntVectorIt ;

    IntVector Numbers(VECTOR_SIZE) ;

    IntVectorIt start, end, it, location ;

    // Initialize vector Numbers
    Numbers[0] = 4 ;
    Numbers[1] = 10;
    Numbers[2] = 70 ;
    Numbers[3] = 10 ;
    Numbers[4] = 30 ;
    Numbers[5] = 69 ;
    Numbers[6] = 96 ;
    Numbers[7] = 100;

    start = Numbers.begin() ;   // location of first
                                // element of Numbers

    end = Numbers.end() ;       // one past the location
                                // last element of Numbers

    //sort Numbers using the function object less<int>()
    //upper_bound assumes that Numbers is sorted
    //using the "compare" (less<int>() in this case)
    //function
    sort(start, end, less<int>()) ;

    // print content of Numbers
    cout << "Numbers { " ;
    for(it = start; it != end; it++)
        cout << *it << " " ;
    cout << " }\n" << endl ;

    //return the highest location at which 10 can be inserted
    // in Numbers
    location = upper_bound(start, end, 10, less<int>()) ;

    cout << "Last location  for element 10 in Numbers is: "
        << location - start << endl ;
}

Numbers { 4 10 10 30 69 70 96 100  }

Last location  for element 10 in Numbers is: 3

Header: <algorithm>

Community Additions

ADD
Show:
© 2015 Microsoft