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
);
參數
_First
處理順向 Iterator 的第一個項目的位置會搜尋的範圍。_Last
處理順向的 Iterator 超過最後一個項目的位置是在要搜尋的範圍。_Comp
指定條件的二進位述詞將內容由相鄰項目的值會搜尋範圍的。
傳回值
彼此相等相鄰字組中的第一個項目的順向 Iterator (第一版) 或滿足二進位碼述詞測量的條件 (在第二個版本),在中找到,前提是這類的項目。 否則,指向 _Last 的 Iterator 傳回。
備註
adjacent_find 演算法是一種 nonmutating 序列的演算法。 要搜尋的範圍必須是有效的,任何指標必須 dereferenceable,而最後一個位置開始可取得的會增加。 演算法的時間複雜度是線性在範圍中的元素數。
用來 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
請參閱
參考
Nonpredicate Version of adjacent_find