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