![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ff7da834361faea9b4a42f65f7d09bee.png)
返回[_First,_Last)区间内与[_First2,_Last2)区间完全吻合的第一个子区间内的第一元素位置,子区间内的元素必须完全等于[_First2,_Last2)的元素
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5feeab9089b3aeb74aca125c704dcbe9.png)
返回[_First,_Last)区间内与[_First2,_Last2)区间完全吻合的第一个子区间内的第一元素位置,子区间内的元素必须造成_Pred(elem,searchElem)结果为true.
如果没有找到匹配元素,返回end
复杂度:线性
template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{
for (int i = first; i <= last; ++i)
{
coll.insert(coll.end(), i);
}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{
cout << optcstr;
for (auto elem : coll)
{
cout << elem << ' ';
}
cout << endl;
}
int main()
{
deque<int>coll;
list<int>subcoll;
INSERT_ELEMENTS(coll, 1, 7);
INSERT_ELEMENTS(coll, 1, 7);
INSERT_ELEMENTS(subcoll, 3, 6);
PRINT_ELEMENTS(coll, "coll: ");
PRINT_ELEMENTS(subcoll, "subcoll: ");
auto pos = search(coll.begin(), coll.end(), subcoll.begin(), subcoll.end());
while (pos != coll.end())
{
cout << "subcoll found starting with element " << distance(coll.begin(), pos) + 1 << endl;
++pos;
pos = search(pos, coll.end(), subcoll.begin(), subcoll.end());
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/aa29b77329d17d73b4ef1899802c2499.png)
下面的例子使用search查找偶数、奇数、偶数排列而成的子序列:
int main()
{
vector<int>coll;
INSERT_ELEMENTS(coll, 1, 9);
PRINT_ELEMENTS(coll, "coll: ");
bool checkEvenArgs[3] = { true, false, true };
auto pos = search(coll.begin(), coll.end(), checkEvenArgs, checkEvenArgs + 3, checkEven);
while (pos != coll.end())
{
cout << "subrange found starting with element " << distance(coll.begin(), pos) + 1 << endl;
pos = search(++pos, coll.end(), checkEvenArgs, checkEvenArgs + 3, checkEven);
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6e27d5ac34ba27062b0aabd5d5b95ced.png)