adjacent_find関数は隣り合った要素が、等しいかもしくは、ある条件を
満たしたものを見つけ出します。
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