📜  C++中的std :: find_if,std :: find_if_not(1)

📅  最后修改于: 2023-12-03 15:29:53.903000             🧑  作者: Mango

C++中的std::find_if,std::find_if_not

C++是一种流行的编程语言,它提供了许多STL(标准模板库)函数来简化开发,其中std::find_if和std::find_if_not是两个常见的函数,用于在集合中查找元素。下面就详细介绍一下这两个函数。

std::find_if

std::find_if函数用于在集合(vector、array、list等)中查找符合条件的第一个元素,并返回一个指向该元素的迭代器。该函数需要传入一个lambda表达式作为判断条件,该表达式接受集合中的每个元素作为输入,并返回一个bool值,表示该元素是否满足条件。函数的具体定义如下:

template< class InputIt, class UnaryPredicate >
InputIt find_if( InputIt first, InputIt last, UnaryPredicate p );

示例代码如下:

#include <algorithm>
#include <vector>
#include <iostream>

int main()
{
    std::vector<int> vec{ 1, 2, 3, 4, 5 };
    auto it = std::find_if(vec.begin(), vec.end(), [](int i){ return i > 3; });
    if (it != vec.end())
    {
        std::cout << "Found element: " << *it << std::endl; // 打印出 4
    }
    return 0;
}

以上代码中,lambda表达式[] (int i) {return i>3;}接受一个整数作为参数,返回一个bool值,表示该整数是否大于3。在find_if函数中,它被用于对集合vec的每个元素进行判断。

std::find_if_not

std::find_if_not函数与std::find_if函数类似,但是它查找不满足条件的第一个元素。它也需要传入一个lambda表达式作为判断条件,该表达式应该返回bool值来表示该元素不满足条件。函数的具体定义如下:

template<class InputIt, class UnaryPredicate>
InputIt find_if_not( InputIt first, InputIt last, UnaryPredicate q );

示例代码如下:

#include <algorithm>
#include <vector>
#include <iostream>

int main()
{
    std::vector<int> vec{ 1, 2, 3, 4, 5 };
    auto it = std::find_if_not(vec.begin(), vec.end(), [](int i){ return i < 4; });
    if (it != vec.end())
    {
        std::cout << "Found element: " << *it << std::endl; // 打印出 4
    }
    return 0;
}

以上代码中,lambda表达式[] (int i) {return i<4;}接受一个整数作为参数,返回一个bool值,表示该整数是否小于4。在find_if_not函数中,它被用于对集合vec的每个元素进行判断。

总结一下,std::find_if和std::find_if_not是非常有用的STL函数,可以方便开发人员进行集合元素的查找,能够大大提高程序开发效率。