upper_bound関数は、指定された値よりも大きな最初の要素を捜します。
template_Firstは、検索対象の最初の要素を指定します。ForwardIterator upper_bound( ForwardIterator _First, ForwardIterator _Last, const Type& _Val ); 
_Lastは、検索対象の最後の次の要素を指定します。
_Valには、値を指定します。
検索対象の要素は昇順または降順で並んでいなくてはなりません。
では、サンプルのプログラムを見てみましょう。
// upperbound01.cpp
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
	vector <int> v1, v2, v3;
	vector <int>::iterator pv;
	int i;
	for (i = 0; i < 10; i++)
		v1.push_back(i);
	for (pv = v1.begin(); pv != v1.end(); pv++)
		cout << *pv << ",";
	cout << endl;
	pv = upper_bound(v1.begin(), v1.end(), 4);
	cout << "4よりおおきい最初の要素は" << *pv << endl;
	for (i = 10; i < 0; i--)
		v2.push_back(i);
	for (pv = v2.begin(); pv != v2.end(); pv++)
		cout << *pv << ",";
	cout << endl;
	pv = upper_bound(v2.begin(), v2.end(), 4);
	cout << "4より大きい最初の要素は" << *pv << endl;
	return 0;
}
実行結果はどうなるかというと
特に難しくはないですね。
Update Feb/23/2009 By Y.Kumei