• cb30a_c++_STL_算法_查找算法_(3)search_find_end


    cb30a_c++_STL_算法_查找算法_(3)search_find_end
    search()
    pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
    find_end(),从后面开始找

    注意:
    这两个算法是一对
    第二个算法应该叫search_end(),但是被命名为find_end()

    pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
    //ivec.begin(), ivec.end()传给第一个参数,elem.
    //,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
    //bool checkEven(int elem, bool even)//二元谓词,两个return

      1 /*cb30a_c++_STL_算法_查找算法_(3)search_find_end
      2 search()
      3 pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
      4 find_end(),从后面开始找
      5 
      6 注意:
      7 这两个算法是一对
      8 第二个算法应该叫search_end(),但是被命名为find_end()
      9 
     10 pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
     11         //ivec.begin(), ivec.end()传给第一个参数,elem.
     12         //,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
     13         //bool checkEven(int elem, bool even)//二元谓词,两个return
     14 */
     15 #include <iostream>
     16 #include <algorithm>
     17 #include <deque>
     18 #include <list>
     19 #include <vector>
     20 
     21 using namespace std;
     22 
     23 //1,2,2,4,5
     24 //true, false, true
     25 //false表示奇数
     26 //true 偶数
     27 
     28 bool checkEven(int elem, bool even)//二元谓词,两个return
     29 {
     30     if (even)
     31         return elem % 2 == 0;// 
     32     else
     33         return elem % 2 == 1;//
     34 }
     35 //把 true, false, true,三个传进去,连续3个都返回true,说明查找到了。
     36 
     37 int main()
     38 {
     39     deque<int> ideq;
     40     list<int> ilist;
     41     for (int i = 1; i <= 7; ++i)
     42         ideq.insert(ideq.end(), i);//插入到最后
     43     for (int i = 1; i <= 7; ++i)
     44         ideq.insert(ideq.end(), i);//插入到最后
     45     for (deque<int>::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)
     46         cout << *iter << ' ';
     47     cout << endl;
     48     for (int i = 3; i <= 6; ++i)
     49         ilist.insert(ilist.end(), i);
     50     for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
     51         cout << *iter << ' ';
     52     cout << endl;
     53 
     54     deque<int>::iterator pos;
     55     pos = search(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
     56         cout << "在ideq容器里面找ilist" << endl;
     57         if (pos != ideq.end())
     58             cout << "找到了位置:" << distance(ideq.begin(), pos)+1 << endl;
     59         else
     60             cout << "没找到" << endl;
     61         ++pos;
     62         pos = search(pos, ideq.end(), ilist.begin(), ilist.end());
     63         cout << "在ideq容器里面找ilist" << endl;
     64         if (pos != ideq.end())
     65             cout << "找到了位置:" << distance(ideq.begin(), pos)+1 << endl;
     66         else
     67             cout << "没找到" << endl;
     68 
     69         cout << "使用find_end,从后面开始查找。进行查找:" << endl;
     70         pos = find_end(ideq.begin(), ideq.end(), ilist.begin(), ilist.end());
     71 
     72         if (pos != ideq.end())
     73             cout << "找到了位置:" << distance(ideq.begin(), pos) + 1 << endl;
     74         else
     75             cout << "没找到" << endl;
     76 
     77         cout << "使用谓词查找" << endl;
     78 
     79         vector<int> ivec;
     80         bool checkEvenArgs[3] = {true,false,true};
     81         for (int i = 1; i <= 9; ++i)
     82             ivec.push_back(i);
     83         for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
     84             cout << *iter << ' ';
     85         cout << endl;
     86         vector<int>::iterator pos2;
     87         pos2 = search(ivec.begin(), ivec.end(),checkEvenArgs,checkEvenArgs+3, checkEven);
     88         //ivec.begin(), ivec.end()传给第一个参数,elem.
     89         //,checkEvenArgs,checkEvenArgs+3,传给checkEven的第二个参数,even
     90         //bool checkEven(int elem, bool even)//二元谓词,两个return
     91 
     92 
     93         //1,2,3,4,5,6,7
     94         //true,false,true.   对应2,3,4。所以在第二就找到了。显示2
     95         if (pos2 != ivec.end())
     96             cout << "找到了,位置是:" << distance(ivec.begin(), pos2)+1 << endl;
     97         else
     98             cout << "没找到" << endl;
     99     return 0;
    100 }
    欢迎讨论,相互学习。 txwtech@163.com
  • 相关阅读:
    「十二省联考2019」 春节十二响
    「八省联考2018」 劈配
    斯特林数
    「POJ2505」A multiplication game [博弈论]
    [luogu2048] [bzoj2006] [NOI2010] 超级钢琴 题解
    [HNOI2002]-洛谷2234-营业额统计-Treap
    平衡树Treap模板与原理
    KMP算法讲解
    高斯消元--模板,原理
    第一篇博客!!
  • 原文地址:https://www.cnblogs.com/txwtech/p/12332098.html
Copyright © 2020-2023  润新知