STL_算法_查找算法(adjacent_find)

来源:互联网 发布:天界法宝升阶数据 编辑:程序博客网 时间:2024/05/01 04:58

C++ Primer 学习中。。。

 

简单记录下我的学习过程 (代码为主)


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
原创粉丝点击