template<class ForwardIterator> ForwardIterator adjacent_find( ForwardIterator _First, ForwardIterator _Last ); template<class ForwardIterator , class BinaryPredicate> ForwardIterator adjacent_find( ForwardIterator _First, ForwardIterator _Last, BinaryPredicate _Comp );最初のバージョンは隣り合った要素が等しいものを捜します。
後のバージョンは、隣り合った要素が_Comp関数で示した条件を満たすものを捜します。
検索しても条件に合うものがない場合は_Lastが返されます。
_Firstは、検索の最初の要素の反復子を指定します。
_Lastには、最後の要素の次の反復子を指定します。
_Compには、条件関数のアドレスを指定します。
条件関数は次のような感じになります。
bool cond(int element1, int elemnet2) { return (element1 * 3 == element2) }この例では、隣接する要素の最初の要素を3倍したものが次の要素であるものを 捜すことになります。
では、サンプルを見てみましょう。
// adjacent_find01.cpp #include <iostream> #include <algorithm> #include <vector> using namespace std; bool condition(int, int); int main() { vector<int> v; vector<int>::iterator result; int i; for (i = 0; i < 10; i++) v.push_back(i); for (i = 0; i < 10; i++) cout << "v[" << i << "] = " << v[i] << endl; result = adjacent_find(v.begin(), v.end(), condition); if (result != v.end()) { cout << *result << ", " << *(result++) << endl; } return 0; } bool condition(int n1, int n2) { return ((n1 + n2) == 13); }実行結果を見てみましょう。
これは、隣り合う要素を足すと13になるものを捜していますね。
隣り合う要素で足すと13になるのは6と7ですね。
Update Aug/08/2005 By Y.Kumei