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
正向迭代器,其定址要搜尋範圍中第一個元素的位置。_Last
正向迭代器,其定址要搜尋範圍中最後一個元素之後的位置。_Comp
二元述詞提供所搜尋的範圍中相鄰元素的值要符合的條件。
傳回值
等於彼此 (在第一版中),或符合二元述詞所指定條件 (在第二個版本中,且前提是找不到此類元素配對) 之相鄰的配對的第一個元素的正向迭代器。 否則則是指向 _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