本节我们将继续进行序列查找的学习——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;
}

编译结果如下:

adjacent_find()

对于序列{1,2,3,3,4,5},我们可以看到第一对两个相等的3且第一个3的下标是“2”,输出完全符合我们的猜想!

总结:adjacent_find(beg , end)函数的功能是:在序列[beg , end)中查找第一对相邻元素,主要应用于检查数据是否重复、字符串和文本处理等场景。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)