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!
    
    */
    

  • 相关阅读:
    [译]JavaScript源码转换:非破坏式与再生式
    [译]ES6中的代理对象
    tensorflow 如何获取graph中的所有tensor name
    python3中的str和bytes
    git submodule 添加 更新 删除 教程
    《重构:改善既有代码的设计》摘抄
    thrift入门教程/thrift资料集合
    将python2代码升级为python3代码最佳实践
    python标准库:subprocess——子进程管理
    安装“python-snappy”遇到“error: command 'x86_64-linux-gnu-gcc' failed with exit status 1”
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6946769.html
Copyright © 2011-2022 走看看