C++ 算法 find_if_not()函数
C++算法 find_if_not()函数返回范围内第一个谓词值为假(false)的元素值,否则返回范围的最后一个元素。
语法
template <class InputIterator, class UnaryPredicate>
InputIterator find_if_not (InputIterator first, InputIterator last, UnaryPredicate pred);
参数
first :它指定范围的第一个元素。
last :它指定范围的最后一个元素。
pred :这通常是一个一元函数,用于检查范围值以返回布尔值。
返回值
该函数返回一个迭代器,指向范围中第一个pred值为false的元素。如果找不到这样的元素,则函数返回最后一个元素。
示例1
#include<iostream>
#include<algorithm>
#include<array>
int main()
{
std::array<int,6> a={6,7,8,9,10};
std::array<int,6>::iterator ti=std::find_if_not (a.begin(), a.end(), [](int k){return k%2;} );
std::cout<<"In the range given the very first even value is "<<*ti<<"\n";
return 0;
}
输出:
In the range given the very first even value is 6
示例2
#include<iostream>
#include<algorithm>
#include<vector>
bool isEven (int i)
{
return((i%2)==0);
}
int main()
{
std::vector<int> newvector {20, 35, 50, 65};
std::vector<int>::iterator ti;
ti= std::find_if(newvector.begin(),newvector.end(),isEven);
std::cout<<"Out of the given elements, first even element is "<<*ti<<"\n";
std::vector<int>::iterator tie;
tie=std::find_if_not(newvector.begin(), newvector.end(), isEven);
std::cout<<"Out of the given elements, first odd element is "<<*tie<<"\n";
return 0;
}
输出:
Out of the given elements, first odd element is 20
Out of the given elements, first odd element is 35
复杂性
该函数以线性方式移动,从第一个元素向最后一个元素移动。对于列表中的每个元素,都会检查“pred”的值。搜索将继续,直到遇到“pred”值不匹配为止。
数据竞争
该函数访问指定范围内的所有对象或其中一些对象。
异常
如果任何参数引发异常,则该函数会引发异常。