📅  最后修改于: 2020-10-16 14:12:35             🧑  作者: Mango
C++ STL algorithm.search_n()函数在容器[first,last)中搜索计数元素序列的出现,即搜索每个元素以检查其是否满足给定条件。返回满足条件的第一个元素的迭代器,否则返回最后一个元素的迭代器。
template ForwardIterator search_n(ForwardIterator first, ForwardIterator last, Size count, const T&val);
template ForwardIterator search_n ( ForwardIterator first, ForwardIterator last, Size count, const T& val, BinaryPredicate pred);
first:它是范围的第一个元素的前向迭代器,其中元素本身包含在范围中。
last:它是范围最后一个元素的前向迭代器,其中元素本身不包含在范围中。
count:它给出了应该与条件匹配的元素的最少数量。
val:该参数指定在范围上应用search_n函数的条件值或条件条件。
pred:这是一个Binary函数,它接受两个参数,并给出布尔结果。
该函数将迭代器返回到与pred匹配的第一个元素,如果找不到此类元素,则返回迭代器到最后一个元素。
#include
#include
#include
bool newpred(int m, int n)
{
return(m==n);
}
int main()
{
int newints[]={40,50,60,60,50,40,40,50};
std::vector newvector(newints, newints+8);
std::vector::iterator ti;
ti=std::search_n (newvector.begin(),newvector.end(),2,60);
if(ti!=newvector.end())
std::cout<<"Two times 60 has been found at position"<<(ti- newvector.begin())<<"\n";
else
std::cout<<"No match of 60 has been found \n";
return 0;
}
输出:
Two times 60 has been at position 2
#include
#include
#include
using namespace std;
bool newpred(int m, int n)
{
return(m==n);
}
int main()
{
int m, n;
vector u1 = { 11, 22, 33, 44, 55, 33, 33, 66, 77 };
int u2 = 33;
vector::iterator ti;
ti = std::search_n(u1.begin(), u1.end(), 2, u2, newpred);
if (ti!= u1.end())
{
cout << "Value u2 has been found at position "
<< (ti - u1.begin());
}
else
{
cout << "Value u2 is not present"
<< "in vector u1";
}
return 0;
}
输出:
Value u2 has been found at position 5
从第一个元素到最后一个元素,函数的复杂度是线性的。
访问部分或全部容器对象。
如果任何容器元素抛出一个异常,该函数将引发异常。