zoukankan      html  css  js  c++  java
  • find和find_if

    find函数

    是在一个迭代器范围内查找特定元素得函数,可将将他用于任意容器类型得元素。这个函数返回的是所找元素得引用,如果没有找到元素就会返回这个容器得尾迭代器。

    #include <iostream>
    #include <vector>
    #include <time.h>
    
    int main()
    {
        std::vector<int> vec;
        int inputTofind = 0;
        srand(time(NULL));
    
        for (int i = 0; i < 10; ++i)
        {
            int temp = rand() % 100;
            vec.push_back(temp);
            std::cout << temp << " ";
        }
    
        std::cout << std::endl;
        std::cout << "you want to look for num : ";
        std::cin >> inputTofind;
    
        auto endIt = std::end(vec);
        auto result = find(std::begin(vec), endIt, inputTofind);
    
        if (result != endIt)
        {
            std::cout << "find it " << *result << std::endl;
        }
        else
        {
            std::cout << "No find!" << std::endl;
        }
    
    
        return 0;
    }

    结果:

    21 7 55 81 67 44 18 10 82 87
    you want to look for num : 81
    find it 81
    请按任意键继续. . .

    find_if函数

    与find()函数一样,区别就是它可以接受接收一个谓词函数,而不是简单的匹配元素,谓词函数返回的是true或则false;如果是返回了true则find_if函数返回了查找元素的迭代器;如果一直找不到制定的元素就会返回尾迭代器;

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <time.h>
    
    bool perfectScord(int scord)
    {
        return scord >= 80;
    }
    
    int main()
    {
        std::vector<int> vec;
        int inputTofind = 0;
        srand(time(NULL));
    
        for (int i = 0; i < 10; ++i)
        {
            int temp = rand() % 100;
            vec.push_back(temp);
            std::cout << temp << " ";
        }
    
        std::cout << std::endl;
    //     std::cout << "you want to look for num : ";
    //     std::cin >> inputTofind;
    
        auto endIt = std::cend(vec);
        
        auto result = find_if(std::cbegin(vec), endIt, perfectScord);
    
        if (result != endIt)
        {
            std::cout << "find it " << *result << std::endl;
        }
        else
        {
            std::cout << "No find!" << std::endl;
        }
    
        return 0;
    }

    结果是:

    86 82 59 13 84 91 42 18 92 67
    find it 86
    请按任意键继续. . .

    注意的是find_if函数在头文件#include <algorithm>

    其实这里的谓词函数也能换成lambda函数:

    auto result = find_if(std::cbegin(vec), endIt, [](int i) {return i > 80; });
  • 相关阅读:
    laravel 资源控制器方法列表
    laravel 用户认证简单示例
    使用Faker库生成模拟数据
    js获取世界不同时区的当前时间
    html2canvas将页面内容生成图片
    canvas绘制环形进度条
    H5 实现图片上传预览
    js实现复制内容到粘贴板
    node.js创建简单服务测试请求数据
    ES6语法知识
  • 原文地址:https://www.cnblogs.com/boost/p/10578866.html
Copyright © 2011-2022 走看看