STL search函数

STL search函数算法

STL 中 search() 函数用于在一个序列中查找另一个序列第一次出现的位置。

STL search函数详解

头文件

#include <algorithm>

语法

//查找 [first1, last1) 范围内第一个 [first2, last2) 子序列 ForwardIterator search (ForwardIterator first1, ForwardIterator last1, ForwardIterator first2, ForwardIterator last2); //查找 [first1, last1) 范围内,和 [first2, last2) 序列满足 pred 规则的第一个子序列 ForwardIterator search (ForwardIterator first1, ForwardIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate pred);

参数

参数 描述
first1 正向迭代器
last1 正向迭代器
first2 正向迭代器
last2 正向迭代器
pred 用于自定义查找规则。该规则实际上是一个包含 2 个参数且返回值类型为 bool 的函数。

说明

first1、last1:都为正向迭代器,其组合 [first1, last1) 用于指定查找范围;first2、last2:都为正向迭代器,其组合 [first2, last2) 用于指定要查找的序列

pred:用于自定义查找规则。该规则实际上是一个包含 2 个参数且返回值类型为 bool 的函数(第一个参数接收 [first1, last1) 范围内的元素,第二个参数接收 [first2, last2) 范围内的元素)。函数定义的形式可以是普通函数,也可以是函数对象。

技术细节

实际上,第一种语法格式也可以看做是包含一个默认的 pred 参数,该参数指定的是一种相等规则,即在 [first1, last1) 范围内查找和 [first2, last2) 中各个元素对应相等的子序列;而借助第二种语法格式,我们可以自定义一个当前场景需要的匹配规则。

同时,search() 函数会返回一个正向迭代器,当函数查找成功时,该迭代器指向查找到的子序列中的第一个元素;反之,如果查找失败,则该迭代器的指向和 last1 迭代器相同。

案例

STL search函数

使用 STL search 函数查找集合

#include <iostream> #include <algorithm> #include <vector> using namespace std; class mycomp { public: bool operator()(const int& i, const int& j) { return (i%j == 0); } }; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; vector<int> myvector{1, 2, 3, 4, 8, 12, 18, 1, 2, 3}; int myarr[] = {1, 2, 3}; vector<int>::iterator it = search(myvector.begin(), myvector.end(), myarr, myarr + 3); if (it != myvector.end()) { cout << "第一个{1,2,3}的起始位置为:" << it - myvector.begin() << ", *it = " << *it << endl; } int myarr2[] = {2, 4, 6}; it = search(myvector.begin(), myvector.end(), myarr2, myarr2 + 3, mycomp()); if (it != myvector.end()) { cout << "第一个{2,3,4}的起始位置为:" << it - myvector.begin() << ", *it = " << *it; } cout << endl; return 0; }

我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ search.cpp -std=c++11

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

16_STL search函数.png

我们使用了 search 函数,分别在数组和在 vector 中查找了元素。

STL search函数总结

在 STL 中 search() 函数用于在一个序列中查找另一个序列第一次出现的位置。