C++的STL模板的adjacent_find()

adjacent_find         //用来查找连续两个相等的或者符合方法的

#include<iostream>  
#include<cstdio>  
#include<string>  
#include <vector>  
#include<algorithm>  
using namespace std;  
  
/***************************************** 
//所有容器适用(线性的) 
adjacent_find(b,e); 
adjacent_find(b,e,p); 
用来查找连续两个相等的或者符合方法的 
 
如果是已序区间 
则选用已序区间查找算法 
binary_search() 
includes() 
lower_bound() 
upper_bound() 
*****************************************/  
  
  
/************************************************************************************* 
std::adjacent_find()           所有容器适用                                algorithm 
-------------------------------------------------------------------------------------- 
template <class ForwardIterator> 
   ForwardIterator adjacent_find ( ForwardIterator first, ForwardIterator last ); 
 
template <class ForwardIterator, class BinaryPredicate> 
   ForwardIterator adjacent_find ( ForwardIterator first, ForwardIterator last, 
                                   BinaryPredicate pred ); 
 
//eg: 
template <class ForwardIterator> 
ForwardIterator adjacent_find ( ForwardIterator first, ForwardIterator last ) 
{ 
    if (first != last) 
    { 
        ForwardIterator next=first; 
        ++next; 
        while (next != last) 
        { 
            if (*first == *next)  // or: if (pred(*first,*next)), for the pred version 
                return first; 
            else{++first;++next;} 
        } 
    } 
    return last; 
} 
*************************************************************************************/  
bool myfunction (int i, int j)  
{  
    return (i==j*2);  
}  
int main()  
{  
    int myints[] = {10,20,30,30,40,20,10,20};  
  
    vector<int> myvector (myints,myints+8);  
    vector<int>::iterator it;  
  
    for(it=myvector.begin();it!=myvector.end();++it)  
        cout<<*it<<" ";  
    cout<<endl;  
  
    // using default comparison:  
    it = adjacent_find (myvector.begin(), myvector.end());  
  
    if (it!=myvector.end())  
        cout << "the first consecutive repeated elements are: " << *it << endl;  
  
    //using predicate comparison:  
    it = adjacent_find (myvector.begin(), myvector.end(), myfunction);  
  
    if (it!=myvector.end())  
        cout << "the second consecutive repeated elements are: " << *it << endl;  
  
    return 0;  
}  
/***** 
Output 
    10 20 30 30 40 20 10 20 
    the first consecutive repeated elements are: 30 
    the second consecutive repeated elements are: 40 
*/  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值