• cb32a_c++_STL_算法_查找算法_(5)adjacent_find


    cb32a_c++_STL_算法_查找算法_(5)adjacent_find
    adjacent_find(b,e),b,begin(),e,end()
    adjacent_find(b,e,p),p-parameter(谓词),函数,条件,规则.连续的两个符合条件的数据
    adjacent_find() 算法可以用来搜索序列中两个连续相等的元素。
    用 == 运算符来比较连续的一对元素,返回的迭代器指向前两个相等元素中的第一个。
    如果没有一对相等的元素,这个算法返回这个序列的结束迭代器。

    http://c.biancheng.net/view/576.html

    如果是已序区间,可以使用已序区间的查找算法(效率高),比如:set和multiset_关联容器自动排序
    binary_search()
    includes()
    lower_bound()
    upper_bound()

    */

     1 /*cb32a_c++_STL_算法_查找算法_(5)adjacent_find
     2 adjacent_find(b,e),b,begin(),e,end()
     3 adjacent_find(b,e,p),p-parameter(谓词),函数,条件,规则.连续的两个符合条件的数据
     4 adjacent_find() 算法可以用来搜索序列中两个连续相等的元素。
     5 用 == 运算符来比较连续的一对元素,返回的迭代器指向前两个相等元素中的第一个。
     6 如果没有一对相等的元素,这个算法返回这个序列的结束迭代器。
     7 
     8 http://c.biancheng.net/view/576.html
     9 
    10 如果是已序区间,可以使用已序区间的查找算法(效率高),比如:set和multiset_关联容器自动排序
    11 binary_search()
    12 includes()
    13 lower_bound()
    14 upper_bound()
    15 
    16 */
    17 #include <iostream>
    18 #include <algorithm>
    19 #include <vector>
    20 
    21 using namespace std;
    22 bool doubled(int elem1, int elem2) //返回值是bool,就是谓词
    23 {
    24     return elem1 * 2 == elem2;
    25 }
    26 
    27 int main()
    28 {
    29     vector<int> ivec;
    30     ivec.push_back(1);
    31     ivec.push_back(3);
    32     ivec.push_back(3);
    33     ivec.push_back(4);
    34     ivec.push_back(8);
    35     ivec.push_back(5);
    36     ivec.push_back(0);
    37     for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
    38         cout << *iter << ' ';
    39     cout << endl;
    40 
    41     vector<int>::iterator pos;
    42     pos = adjacent_find(ivec.begin(), ivec.end());//寻找两个连续相等的数
    43     if (pos != ivec.end())
    44         cout << "找到了,位置是:" << distance(ivec.begin(), pos) + 1 << endl;
    45     else
    46         cout << "没有两个连续的相等的数" << endl;
    47 
    48     pos = adjacent_find(ivec.begin(), ivec.end(), doubled);//doubled就是谓词
    49     if (pos != ivec.end())
    50         cout << "找到了,符合doubled函数条件。位置是:" << distance(ivec.begin(), pos) + 1 << endl;
    51     else
    52         cout << "没有两个连续的符合doubled函数条件" << endl;
    53 
    54     return 0;
    55 }
    欢迎讨论,相互学习。 txwtech@163.com
  • 相关阅读:
    sockjs-node/info?t=报错解决
    微信昵称表情符号前端显示问题
    vue-cli 3.0项目安装报错
    vue-cli项目按需引入element-ui实际操作
    javafx分别设置四个边框
    springmvc使用<mvc:default-servlet-handler/>导致的handler失效
    windows注册表删除右键菜单
    计算机实现32位整数加减乘除的方法
    常用排序算法
    AbstractCollection类中的 T[] toArray(T[] a)方法源码解读
  • 原文地址:https://www.cnblogs.com/txwtech/p/12337322.html
Copyright © 2020-2023  润新知