• 常用的查找算法


    一、各种常用的查找算法

    1、find

    2、binary_search

    3、adjacent_find

    4、find_if

    5、count count_if

    二、案例

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    //find 查找基础数据类型
    void test01()
    {
        vector<int> v1;
        for (int i = 0;i < 10;i++)
        {
            v1.push_back(i);
        }
    
        vector<int>::iterator ret = find(v1.begin(), v1.end(), 5);
        if (ret == v1.end())
        {
            cout << "没有找到!" << endl;
        }
        else
        {
            cout << "找到了:" << *ret << endl;
        }
    }
    
    //find 查找自定义数据类型
    class Person
    {
    public:
        Person(int age,int id):age(age),id(id){}
        bool operator==(const Person& p) const
        {
            return p.id == this->id && p.age == this->age;
        }
    public:
        int id;
        int age;
    };
    void test02()
    {
        vector<Person> v1;
        Person p1(10, 20), p2(30, 40), p3(50, 60);
        v1.push_back(p1);
        v1.push_back(p2);
        v1.push_back(p3);
        vector<Person>::iterator ret = find(v1.begin(), v1.end(), p1);
        if (ret == v1.end())
        {
            cout << "没有找到!" << endl;
        }
        else
        {
            cout << "找到了!" << endl;
        }
    }
    
    //binary_search 二分查找法
    void test03()
    {
        vector<int> v1;
        for (int i = 0;i < 10;i++)
        {
            v1.push_back(i);
        }
    
        bool ret = binary_search(v1.begin(), v1.end(), 5);
        if (ret)
        {
            cout << "找到了!" << endl;
        }
        else
        {
            cout << "没找到!" << endl;
        }
    }
    
    //adjacent_find 查找相邻重复元素
    void test04()
    {
        vector<int> v1;
        for (int i = 0;i < 10;i++)
        {
            v1.push_back(i);
        }
        v1.push_back(9);
    
        vector<int>::iterator it = adjacent_find(v1.begin(), v1.end());
        if (it!=v1.end())
        {
            cout << "找到相邻重复元素:" << *it << endl;
        }
        else
        {
            cout << "没找到相邻重复元素!" << endl;
        }
    }
    
    //find_if 会根据我们的条件(函数),返回第一个满足条件的元素的迭代器
    bool MySearch(int val)
    {
        return val > 5;
    }
    void test05()
    {
        vector<int> v1;
        for (int i = 0;i < 10;i++)
        {
            v1.push_back(i);
        }
        v1.push_back(9);
    
        vector<int>::iterator it = find_if(v1.begin(), v1.end(), MySearch);
        if (it != v1.end())
        {
            cout << "找到:" << *it << endl;
        }
        else
        {
            cout << "没找到!" << endl;
        }
    }
    
    //count count_if 统计个数
    bool MySearch2(int val)
    {
        return val > 5;
    }
    void test06()
    {
        vector<int> v1;
        for (int i = 0;i < 10;i++)
        {
            v1.push_back(i);
        }
        v1.push_back(9);
    
        int num = count(v1.begin(), v1.end(), 9);
        cout << "9出现的次数:" << num << endl;
        num = count_if(v1.begin(), v1.end(), MySearch2);
        cout << "大于5的个数:" << num << endl;
    }
    int main(void)
    {
        //test01();
        //test02();
        //test03();
        //test04();
        //test05();
        test06();
        return 0;
    }
  • 相关阅读:
    「实战」攻防中钓鱼上线MAC终端
    JAVA审计SQL注入
    使用Netcat实现通信和反弹Shell
    通过Mssql提权的几种姿势
    第三方提权之ServU提权
    使用LCX进行内网端口转发
    Proxifier/ProxyChains+reGeorg组合进行内网代理
    通过Mysql提权的几种姿势
    java:文件与IO
    java:常用类库api
  • 原文地址:https://www.cnblogs.com/yuehouse/p/10120658.html
Copyright © 2020-2023  润新知