STL_算法_查找算法(binary_search、includes)

来源:互联网 发布:win和mac双系统 编辑:程序博客网 时间:2024/04/28 08:05

C++ Primer 学习中。。。

 

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


所有容器适用(O(log(n)))     已序区间查找算法


binary_search             //二分查找,返回bool值,


includes                    //包含查找,返回bool值。



#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;/*****************************************//所有容器适用(O(log(n)))已序区间查找算法binary_search()             //二分查找,返回bool值,includes()                  //包含查找,返回bool值。*****************************************//*************************************************************************************std::binary_search              所有排序容器适用                           algorithm--------------------------------------------------------------------------------------template <class ForwardIterator, class T>  bool binary_search ( ForwardIterator first, ForwardIterator last,                       const T& value );template <class ForwardIterator, class T, class Compare>  bool binary_search ( ForwardIterator first, ForwardIterator last,                       const T& value, Compare comp );//eg:template <class ForwardIterator, class T>    bool binary_search ( ForwardIterator first, ForwardIterator last, const T& value )    {        first = lower_bound(first,last,value);        return (first!=last && !(value<*first));    }*************************************************************************************//*************************************************************************************std::includes                   所有排序容器适用                           algorithm--------------------------------------------------------------------------------------template <class InputIterator1, class InputIterator2>  bool includes ( InputIterator1 first1, InputIterator1 last1,                  InputIterator2 first2, InputIterator2 last2 );template <class InputIterator1, class InputIterator2, class Compare>  bool includes ( InputIterator1 first1, InputIterator1 last1,                  InputIterator2 first2, InputIterator2 last2, Compare comp );//eg:template <class InputIterator1, class InputIterator2>    bool includes ( InputIterator1 first1, InputIterator1 last1,                  InputIterator2 first2, InputIterator2 last2 )    {        while (first1!=last1)        {            if (*first2<*first1) break;            else if (*first1<*first2) ++first1;            else { ++first1; ++first2; }            if (first2==last2) return true;        }        return false;    }*************************************************************************************/bool myfunction (int i,int j)  { return (i<j);}int main(){    int myints[] = {1,2,3,4,5,4,3,2,1};    vector<int> v(myints,myints+9);                         // 1 2 3 4 5 4 3 2 1    // using default comparison:    sort (v.begin(), v.end());    cout << "looking for a 3...  ";    if (binary_search (v.begin(), v.end(), 3))    cout << "found!\n"; else cout << "not found.\n";    // using myfunction as comp:    sort (v.begin(), v.end(), myfunction);    cout << "looking for a 6... ";    if (binary_search (v.begin(), v.end(), 6, myfunction))        cout << "found!\n"; else cout << "not found.\n";    cout<<endl;/**----------------------------------------------------------------------------------**/    int container[] = {5,15,10,25,20,35,30,50,45,40};    int continent[] = {40,30,20,10};    sort (container,container+10);    sort (continent,continent+4);    // using default comparison:    if ( includes(container,container+10,continent,continent+4) )        cout << "container includes continent!" << endl;    // using myfunction as comp:    if ( includes(container,container+10,continent,continent+4, myfunction) )        cout << "container includes continent!" << endl;return 0;}/*****Output    looking for a 3...  found!    looking for a 6... not found.    container includes continent!    container includes continent!*/

0 0