adjacent_find
等しいか、または指定された条件を満たす 2 個の隣接する要素を検索します。
template<class ForwardIterator> ForwardIterator adjacent_find( ForwardIterator _First, ForwardIterator _Last ); template<class ForwardIterator , class BinaryPredicate> ForwardIterator adjacent_find( ForwardIterator _First, ForwardIterator _Last, BinaryPredicate _Comp );
パラメーター
_First
検索範囲内の先頭の要素の位置を示す前方反復子。_Last
検索範囲の最後の要素の 1 つ後ろの位置を示す前方反復子。_Comp
検索範囲内の隣接する要素の値によって満たされる条件を提供する二項述語。
戻り値
互いに等しい (1 つ目のバージョン) か、二項述語によって指定された条件を満たす (2 つ目のバージョン) 隣接するペアの最初の要素への前方反復子 (このような要素のペアが見つかった場合)。 それ以外の場合、_Last を指す反復子が返されます。
解説
adjacent_find アルゴリズムは、変化しないシーケンス アルゴリズムです。 検索範囲が有効であり、すべてのポインターが逆参照可能であって、かつ先頭位置からのインクリメントにより最後の位置に到達可能である必要があります。 アルゴリズムの時間の複雑さは、範囲に含まれる要素の数に比例します。
要素間の一致を判断するために使用される operator== によって、そのオペランド間の等価関係関係が強制される必要があります。
使用例
// alg_adj_fnd.cpp
// compile with: /EHsc
#include <list>
#include <algorithm>
#include <iostream>
// Returns whether second element is twice the first
bool twice (int elem1, int elem2 )
{
return elem1 * 2 == elem2;
}
int main( )
{
using namespace std;
list <int> L;
list <int>::iterator Iter;
list <int>::iterator result1, result2;
L.push_back( 50 );
L.push_back( 40 );
L.push_back( 10 );
L.push_back( 20 );
L.push_back( 20 );
cout << "L = ( " ;
for ( Iter = L.begin( ) ; Iter != L.end( ) ; Iter++ )
cout << *Iter << " ";
cout << ")" << endl;
result1 = adjacent_find( L.begin( ), L.end( ) );
if ( result1 == L.end( ) )
cout << "There are not two adjacent elements that are equal."
<< endl;
else
cout << "There are two adjacent elements that are equal."
<< "\n They have a value of "
<< *( result1 ) << "." << endl;
result2 = adjacent_find( L.begin( ), L.end( ), twice );
if ( result2 == L.end( ) )
cout << "There are not two adjacent elements where the "
<< " second is twice the first." << endl;
else
cout << "There are two adjacent elements where "
<< "the second is twice the first."
<< "\n They have values of " << *(result2++);
cout << " & " << *result2 << "." << endl;
}
必要条件
ヘッダー: <algorithm>
名前空間: std