第95章 adjacent_findアルゴリズム関数を使う


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ですね。




[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Aug/08/2005 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。