STL adjacent_find函数

STL adjacent_find函数算法

STL 中 adjacent_find() 函数用于在指定范围内查找 2 个连续相等的元素。

STL adjacent_find函数详解

头文件

#include <algorithm>

语法

//查找 2 个连续相等的元素 ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last); //查找 2 个连续满足 pred 规则的元素 ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last, BinaryPredicate pred);

参数

参数 描述
first 正向迭代器
last 正向迭代器
pred 用于接收一个包含 2 个参数且返回值类型为 bool 的函数,以实现自定义查找规则。

说明

其中,first 和 last 都为正向迭代器,其组合 [first, last) 用于指定该函数的查找范围;pred 用于接收一个包含 2 个参数且返回值类型为 bool 的函数,以实现自定义查找规则。

值得一提的是,pred 参数接收的函数既可以定义为普通函数,也可以用函数对象的形式定义。

技术细节

该函数会返回一个正向迭代器,当函数查找成功时,该迭代器指向的是连续相等元素的第 1 个元素;而如果查找失败,该迭代器的指向和 last 迭代器相同。

案例

STL adjacent_find函数

使用 STL adjacent_find 函数查找集合

#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; std::vector<int> myvector{5, 20, 5, 30, 30, 20, 10, 10, 20}; std::vector<int>::iterator it = adjacent_find(myvector.begin(), myvector.end()); if (it != myvector.end()) { cout << "one : " << *it << '\n'; } it = adjacent_find(++it, myvector.end(), mycomp()); if (it != myvector.end()) { cout << "two : " << *it; } cout << endl; return 0; }

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

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

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

15_STL adjacent_find函数.png

我们使用了 adjacent_find 函数,在 vector 中查找了元素。

STL adjacent_find函数总结

在 STL 中 adjacent_find() 函数用于在指定范围内查找 2 个连续相等的元素。