本节我们将继续进行序列查找的学习——adjacent_find()函数。“adjacent”的意思是“相邻的”,adjacent_find(beg , end)函数的功能是:用于在序列[beg , end)中查找第一对相邻元素,这两个元素满足特定条件(默认是绝对相等),有返回值,如果找到第一对相邻相等元素,则返回指向该对元素的第一个元素的迭代器;否则返回容器的end()。
它的函数模型是:
//查找 2 个连续相等的元素 ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last); //查找 2 个连续满足 pred 规则的元素 ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last, BinaryPredicate pred);
该函数作用于正向迭代器,也就是说支持所有序列式容器,也支持关联式容器但是意义不大(主要是equal_range()表现更好),不支持容器适配器如stack容器等(没有迭代器);同时,该函数也接受二元谓词,使得我们能够不拘泥于“==”绝对相等的关系,还可以有诸如“>=”等自定义关系。
下面我们就通过代码来实际演示一下:
#include<iostream>
#include<vector>
#include<map>
#include<iterator> //使用迭代器函数distance(beg,end) 计算下标,复习前面知识
#include<algorithm>//包含算法头文件!
using namespace std;
/*adjacent_find()*/
/*用于在序列[beg , end)中查找第一对相邻元素,这两个元素满足特定条件(默认是绝对相等)*/
void test()
{
vector<int> v{1,2,3,3,4,5};
auto pos = adjacent_find(v.begin(),v.end());
if(pos!=v.end())
{
cout << "序列{1,2,3,3,4,5}中出现第一对相邻相等元素的起始下标是:【"<< distance(v.begin(),pos) << "】\n";
}
}
int main(){
system("title dotcpp.com");
test();
return 0;
}编译结果如下:

对于序列{1,2,3,3,4,5},我们可以看到第一对两个相等的3且第一个3的下标是“2”,输出完全符合我们的猜想!
总结:adjacent_find(beg , end)函数的功能是:在序列[beg , end)中查找第一对相邻元素,主要应用于检查数据是否重复、字符串和文本处理等场景。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程