常用STL算法2_查找

来源:互联网 发布:java 判断字符串相等 编辑:程序博客网 时间:2024/06/01 07:30
#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <vector>#include <set>#include <list>#include <algorithm>#include <functional>#include <string>#include <iterator> //输出流using namespace std;//谓词1bool FindEquelNum1(int &num1, int &num2){    return (num1 == num2)?true:false;}//谓词2struct FindEquelNum2{public:    FindEquelNum2(int n)    {        m_num = n;    }    bool operator()(int &num1, int &num2)    {        if ((num1 == num2) && (num1 == m_num))            return true;        else            return false;    }private:    int m_num;};void main071_adjacent_find(){    vector<int> vecInt;    vecInt.push_back(1);    vecInt.push_back(2);    vecInt.push_back(2);    vecInt.push_back(4);    vecInt.push_back(5);    vecInt.push_back(5);    //1. adjacent_find: find first matching successor    //vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end());//默认找第一个 ok    //vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end(),FindEquelNum1);////谓词1 ok    //2. find first satisfying _Pred with successor    vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end(), FindEquelNum2(5));//找到满足条件的第一个//谓词2 ok    if (it == vecInt.end())    {        cout<<"not find"<<endl;    }    else    {        cout<<"找到的值为:"<<*it<<endl;        int dis = distance(vecInt.begin(), it);        cout<<"distance:"<<dis<<endl;    }}//二分法void main072_binary_search(){    set<int> setInt;    setInt.insert(3);    setInt.insert(1);    setInt.insert(7);    setInt.insert(5);    setInt.insert(9);    /*    bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)    {           // test if _Val equivalent to some element, using operator<        _First = _STD lower_bound(_First, _Last, _Val);        return (_First != _Last && !(_Val < *_First));    }    */    bool bFind = binary_search(setInt.begin(),setInt.end(),5);    if (bFind)    {        cout<<"binary_search succ"<<endl;    }    else    {        cout<<"binary_search fail"<<endl;    }}//利用等于操作符,把标志范围内的元素与输入值比较,返回相等的个数void main073_count(){    vector<int> vecInt;    vecInt.push_back(1);    vecInt.push_back(2);    vecInt.push_back(2);    vecInt.push_back(4);    vecInt.push_back(5);    vecInt.push_back(5);    /*    count(_InIt _First, _InIt _Last, const _Ty& _Val)    {           // count elements that match _Val        _DEBUG_RANGE(_First, _Last);        return (_Count_np(_Unchecked(_First), _Unchecked(_Last), _Val));    }    typename iterator_traits<_InIt>::difference_type    _Count_np(_InIt _First, _InIt _Last, const _Ty& _Val)    {           // count elements that match _Val        typename iterator_traits<_InIt>::difference_type _Count = 0;        for (; _First != _Last; ++_First)            if (*_First == _Val)                ++_Count;        return (_Count);    }    */    int num = count(vecInt.begin(), vecInt.end(), 5);    cout<<"num:"<<num<<endl;}bool GreatNum(int &num){    return (num > 3);}void main074_count_if(){    vector<int> vecInt;    vecInt.push_back(1);    vecInt.push_back(2);    vecInt.push_back(2);    vecInt.push_back(4);    vecInt.push_back(5);    vecInt.push_back(5);    /*    typename iterator_traits<_InIt>::difference_type    count_if(_InIt _First, _InIt _Last, _Pr _Pred)    {           // count elements satisfying _Pred        _DEBUG_RANGE(_First, _Last);        _DEBUG_POINTER(_Pred);        return (_Count_if(_Unchecked(_First), _Unchecked(_Last), _Pred));    }    */    int num = count_if(vecInt.begin(), vecInt.end(), GreatNum);    cout<<"num:"<<num<<endl;}void main075_find(){    vector<int> vecInt;    vecInt.push_back(1);    vecInt.push_back(3);    vecInt.push_back(5);    vecInt.push_back(7);    vecInt.push_back(9);    /*    _InIt find(_InIt _First, _InIt _Last, const _Ty& _Val)    {           // find first matching _Val        _DEBUG_RANGE(_First, _Last);        return (_Rechecked(_First, _Find(_Unchecked(_First), _Unchecked(_Last), _Val)));    }    */    vector<int>::iterator it = find(vecInt.begin(), vecInt.end(), 5);    cout<<*it<<endl;    int dis = distance(vecInt.begin(), it);    cout<<"dis:"<<dis<<endl;}void main076_find_if(){    vector<int> vecInt;    vecInt.push_back(1);    vecInt.push_back(3);    vecInt.push_back(5);    vecInt.push_back(7);    vecInt.push_back(9);    /*    _InIt find_if(_InIt _First, _InIt _Last, _Pr _Pred)    {           // find first satisfying _Pred        _DEBUG_RANGE(_First, _Last);        _DEBUG_POINTER(_Pred);        return (_Rechecked(_First, _Find_if(_Unchecked(_First), _Unchecked(_Last), _Pred)));    }    */    vector<int>::iterator it = find_if(vecInt.begin(), vecInt.end(), GreatNum);    cout<<*it<<endl;    int dis = distance(vecInt.begin(), it);    cout<<"dis:"<<dis<<endl;    cout<<"******找出大于3的元素及个数********"<<endl;    vector<int>::iterator it2 = vecInt.begin();    int total_cnt = 0;    int dis2 = 0;    for (;it2 != vecInt.end(); it2++)    {        it2 = find_if(it2, vecInt.end(), GreatNum);        dis = distance(vecInt.begin(), it2);        cout<<"location:"<<dis<<"  elem:"<<*it2<<endl;        total_cnt++;    }    cout<<"total_cnt:"<<total_cnt<<endl;}int main(){    //main071_adjacent_find();    //main072_binary_search();    //main073_count();    //main074_count_if();    //main075_find();    main076_find_if();    cout<<"\nhello"<<endl;    system("pause");    return 0;}
0 0
原创粉丝点击