zoukankan      html  css  js  c++  java
  • STL_算法_查找算法(binary_search、includes)

    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!
    "; else cout << "not found.
    ";
    
        // 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!
    "; else cout << "not found.
    ";
        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!
    
    */
    

  • 相关阅读:
    JSP所需要掌握的部分
    Parameter index out of range (1 > number of parameters, which is 0).
    Servlet到Servlet的请求转发与重定向的区别
    servlet范围:数据共享
    hihocoder 1169 猜数字
    UVA 1149 Bin Packing
    Using a Comparison Function for the Key Type
    STL Iterators
    SPOJ Pouring Water
    求DAG上两点的最短距离
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6946769.html
Copyright © 2011-2022 走看看