📜  C++ STL-algorithm.find_if()函数

📅  最后修改于: 2020-10-16 09:13:29             🧑  作者: Mango

C++ STL algorithm函数find_if()

C++ STL algorithm.find_if()函数返回pred值为true的范围内第一个元素的值,否则给出范围的最后一个元素。

句法

template 
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);

参数

first:指定范围的第一个元素。

last:指定范围的最后一个元素。

pred:通常是一元函数,对其范围值进行检查以返回布尔值答案。

返回值

该函数将迭代器返回到pred值为true的范围的第一个元素。如果找不到这样的元素,则该函数返回最后一个元素。

例子1

#include
#include
#include
using namespace std;
bool isAnOdd(int i)
{   
    return((i%2)==1);
}
int main()
{
    std::vector newvector;
    newvector.push_back(20);
    newvector.push_back(35);
    newvector.push_back(50);
    newvector.push_back(65);
    std::vector::iterator ti = std::find_if(newvector.begin(), newvector.end(),isAnOdd);
    std::cout<<"Out of the given elements, first odd element is "<<*ti<<"\n";
    return 0;
}

输出:

Out of the given elements, first odd element is 35

例子2

#include
#include
#include
bool isEven (int i)
{
    return((i%2)==0);
}
int main()
{
    std::vector newvector {20, 35, 50, 65};
    std::vector::iterator ti;
    ti= std::find_if(newvector.begin(),newvector.end(),isEven);
    std::cout<<"Out of the given elements, first even element is "<<*ti<<"\n";
    return 0;

}

输出:

Out of the given elements, first odd element is 20

复杂度

该函数以线性方式移动,从第一个元素到最后一个元素。对于列表中的每个元素,都会检查“ pred”的值。搜索继续进行,直到遇到“ pred”值不匹配的情况。

数据竞争

函数可以访问指定范围内的所有对象,也可以访问其中的一些对象。

异常处理

如果任何参数抛出一个异常,该函数将引发异常。