C++ 算法 search()函数
C++算法search()函数在范围[first1, last1)中搜索由范围[first2, last2)定义的子序列,并返回指向第一个元素的迭代器。如果子序列不存在,则返回指向last1的迭代器。
语法
template<class ForwardIterator1, class ForwardIterator2> ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator last1, ForwardIterator2 first2, ForwardIterator2 last2);
template<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred);
参数
first1 :它是[first1,last1)的第一个元素的正向迭代器。
last1 :它是[first1,last1)的最后一个元素的正向迭代器。
first2 :它是[first2,last2)的第一个元素的正向迭代器。
pred :它是一个接受两个元素作为参数并执行函数设计的二元函数。
返回值
该函数返回一个迭代器,指向子序列的第一个元素的第一次出现,否则返回最后一个元素的last1。
示例1
#include <iostream>
#include <algorithm>
#include <vector>
bool newpredicate (int m, int n)
{
return (m==n);
}
int main ()
{
std::vector<int> haystack;
for (int a=1; a<10; a++) haystack.push_back(a*10);
int patt1[] = {20,30,40,50};
std::vector<int>::iterator ti;
ti = std::search (haystack.begin(), haystack.end(), patt1, patt1+4);
if (ti!=haystack.end())
std::cout << "patt1 found at position " << (ti-haystack.begin()) << '\n';
else
std::cout << "patt1 not found\n";
int patt2[] = {40,35,50};
ti = std::search (haystack.begin(), haystack.end(), patt2, patt2+3, newpredicate);
if (ti!=haystack.end())
std::cout << "patt2 found at position " << (ti-haystack.begin()) << '\n';
else
std::cout << "patt2 not found\n";
return 0;
}
输出结果:
patt1 found at position 1
patt2 not found
示例2
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int m, n;
vector <int> u1={1,2,3,4,5,6,7};
vector <int> u2={3,4,5};
vector<int>::iterator ti;
ti = std::search(u1.begin(), u1.end(), u2.begin(),u2.end());
if(ti!=u1.end())
{
cout<<"Vector2 is present at index:"<<(ti-u1.begin());
}
else
{
cout<<"In vector1, vector2 is not present";
}
return 0;
}
输出:
Vector2 is present at index:2
复杂度
函数在第一个元素到最后一个元素之间具有线性复杂度。
数据竞争
这两个范围中的对象都被访问。
异常
如果任何一个参数抛出异常,函数将抛出异常。