• STL_算法_区间的比較(equal、mismatch、 lexicographical_compare)


    C++ Primer 学习中。。

     

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


    //全部容器适用


    equal(b,e,b2)       //用来比較第一个容器[b,e)和第二个容器b2开头,是否相等
    equal(b,e,b2,p)


    mismatch(b,e,b2)    //用来查找两个容器中第一个不相等的数据,返回迭代器
    mismatch(b,e,b2,p)


    lexicographical_compare(b,e,b2,e2)      //用来比較第一个区间是否比第二个区间小
    lexicographical_compare(b,e,b2,e2,p)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<list>
    #include<algorithm>
    using namespace std;
    
    /*****************************************
    //全部容器适用
    equal(b,e,b2)       //用来比較第一个容器[b,e)和第二个容器b2开头。是否相等
    equal(b,e,b2,p)
    mismatch(b,e,b2)    //用来查找两个容器中第一个不相等的数据,返回迭代器
    mismatch(b,e,b2,p)
    lexicographical_compare(b,e,b2,e2)      //用来比較第一个区间是否比第二个区间小
    lexicographical_compare(b,e,b2,e2,p)
    *****************************************/
    
    /*************************************************************************************
    std::equal                     全部排序容器适用                           algorithm
    --------------------------------------------------------------------------------------
    template <class InputIterator1, class InputIterator2>
      bool equal ( InputIterator1 first1, InputIterator1 last1,
                   InputIterator2 first2 );
    
    template <class InputIterator1, class InputIterator2, class BinaryPredicate>
      bool equal ( InputIterator1 first1, InputIterator1 last1,
                   InputIterator2 first2, BinaryPredicate pred );
    
    //eg:
    template <class InputIterator1, class InputIterator2>
      bool equal ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 )
    {
      while ( first1!=last1 )
      {
        if (!(*first1 == *first2))   // or: if (!pred(*first1,*first2)), for pred version
          return false;
        ++first1; ++first2;
      }
      return true;
    }
    *************************************************************************************/
    
    /*************************************************************************************
    std::mismatch                   全部排序容器适用                           algorithm
    --------------------------------------------------------------------------------------
    template <class InputIterator1, class InputIterator2>
      pair<InputIterator1, InputIterator2>
        mismatch (InputIterator1 first1, InputIterator1 last1,
                  InputIterator2 first2 );
    
    template <class InputIterator1, class InputIterator2, class BinaryPredicate>
      pair<InputIterator1, InputIterator2>
        mismatch (InputIterator1 first1, InputIterator1 last1,
                  InputIterator2 first2, BinaryPredicate pred );
    
    //eg:
    template <class InputIterator1, class InputIterator2>
      pair<InputIterator1, InputIterator2>
        mismatch (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 )
    {
      while ( (first1!=last1) && (*first1==*first2) )  // or: pred(*first1,*first2), for the pred version
      { ++first1; ++first2; }
      return make_pair(first1,first2);
    }
    *************************************************************************************/
    /*************************************************************************************
    std::lexicographical_compare               全部排序容器适用                 algorithm
    --------------------------------------------------------------------------------------
    template <class InputIterator1, class InputIterator2>
      bool lexicographical_compare ( InputIterator1 first1, InputIterator1 last1,
                                     InputIterator2 first2, InputIterator2 last2 );
    
    template <class InputIterator1, class InputIterator2, class Compare>
      bool lexicographical_compare ( InputIterator1 first1, InputIterator1 last1,
                                     InputIterator2 first2, InputIterator2 last2,
                                     Compare comp );
    //eg:
    template <class InputIterator1, class InputIterator2>
      bool lexicographical_compare ( InputIterator1 first1, InputIterator1 last1,
                                     InputIterator2 first2, InputIterator2 last2 )
    {
      while (first1!=last1)
      {
        if (first2==last2 || *first2<*first1) return false;
        else if (*first1<*first2) return true;
        first1++; first2++;
      }
      return (first2!=last2);
    }
    *************************************************************************************/
    
    bool mypredicate (int i, int j)
    {
        return (i==j);
    }
    
    bool mycomp (char c1, char c2)
    {
        return tolower(c1)<tolower(c2);
    }
    
    int main()
    {
    
        //equal(b,e,b2)       //用来比較第一个容器[b,e)和第二个容器b2开头,是否相等
        //equal(b,e,b2,p)
    
        int myints[] = {20,40,60,80,100};          //   myints: 20 40 60 80 100
        vector<int>myvector (myints,myints+5);     // myvector: 20 40 60 80 100
    
        // using default comparison:
        if (equal (myvector.begin(), myvector.end(), myints))
            cout << "The contents of both sequences are equal." << endl;
        else
            cout << "The contents of both sequences differ." << endl;
    
        myvector[3]=81;                            // myvector: 20 40 60 81 100
    
        // using predicate comparison:
        if (equal (myvector.begin(), myvector.end(), myints, mypredicate))
            cout << "The contents of both sequences are equal." << endl;
        else
            cout << "The contents of both sequences differ." << endl;
        cout<<endl;
        /**-----------------------------------------------------------------------------
        Output:
            The contents of both sequences are equal.
            The contents of both sequences differ.
        -----------------------------------------------------------------------------**/
    
        //mismatch(b,e,b2)    //用来查找两个容器中第一个不相等的数据,返回迭代器
        //mismatch(b,e,b2,p)
    
        list<int> mylist;
        for (int i=1; i<6; i++) mylist.push_back (i*10);   // mylist: 10 20 30 40 50
    
        int myints2[] = {10,20,80,40,1024};              // myints2: 10 20 80 40 1024
    
        pair<list<int>::iterator,int*> mypair;
    
        // using default comparison:
        mypair = mismatch (mylist.begin(), mylist.end(), myints2);
        cout << "First mismatching elements: " << *mypair.first;
        cout << " and " << *mypair.second << endl;
    
        mypair.first++;
        mypair.second++;
    
        // using predicate comparison:
        mypair = mismatch (mypair.first, mylist.end(), mypair.second, mypredicate);
        cout << "Second mismatching elements: " << *mypair.first;
        cout << " and " << *mypair.second << endl;
        cout <<endl;
    
        /**-----------------------------------------------------------------------------
        Output:
            First mismatching elements: 30 and 80
            Second mismatching elements: 50 and 1024
        -----------------------------------------------------------------------------**/
    
        //lexicographical_compare(b,e,b2,e2)      //用来比較第一个区间是否比第二个区间小  (长度和ASCII码)
        //lexicographical_compare(b,e,b2,e2,p)
    
        char first[]="apple";         // 5 letters
        char second[]="apart";        // 5 letters   eg:apartment
    
        cout << "Using default comparison (operator<): ";
        if (lexicographical_compare(first,first+5,second,second+5))
            cout << first << " is less than " << second << endl;
        else if (lexicographical_compare(second,second+5,first,first+5))
            cout << first << " is greater than " << second << endl;
        else
            cout << first << " and " << second << " are equivalent
    ";
    
    
        cout << "Using mycomp as comparison object: ";
        if (lexicographical_compare(first,first+5,second,second+5,mycomp))
            cout << first << " is less than " << second << endl;
        else if (lexicographical_compare(second,second+5,first,first+5,mycomp))
            cout << first << " is greater than " << second << endl;
        else
            cout << first << " and " << second << " are equivalent
    ";
        /**-----------------------------------------------------------------------------
        Output:
            Using default comparison (operator<): apple is greater than apart
            Using mycomp as comparison object: apple is greater than apart
        -----------------------------------------------------------------------------**/
    
        return 0;
    }
    


  • 相关阅读:
    Ubuntu的shell之bash和dash
    Linux下烧写工具DNW和USB驱动安装(一)
    make -C M=
    uname -r和uname -a了解
    如何添加Samba用户
    Ubuntu下配置samba实现文件夹共享
    [Jenkins]运行shell报错:寻找匹配的 `"' 是遇到了未预期的文件结束符
    [Shell] 调试shell脚本的技巧 | 校验shell脚本语法 |寻找匹配的 `"' 是遇到了未预期的文件结束符
    [Python]通过python-jenkins操作jenkins slave启动job | 通过python-jenkins实现ios自动化打包接口
    pod: command not found
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7289702.html
Copyright © 2020-2023  润新知