ڼС
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2018 All rights reserved.

STL-algorithm之adjacent_find的用法

adjacent_find ()函数的定义如下:

这个函数的查找给定的序列中是否存在相邻的两个相同的数据,如果存在,那么返回指向第一个元素的的迭代器(或者是指向第一个元素的地址)

#include <iostream>
#include <algorithm>

int main()
{
    using namespace std;
     int const ARRAY_SIZE = 8;
     int array[ARRAY_SIZE] = {1,2,4,4,4,5,6,6};
     int* location = NULL;//存储第一对匹配元素的位置
    
     cout << ‘[‘;
     for (int i = 0; i < ARRAY_SIZE; i++)
         cout << array[i] << ”  “;
     cout << ‘]’ << endl;
    
     location = adjacent_find(array,array + ARRAY_SIZE);
     if(array+ARRAY_SIZE == location)
         cout << “没有找到!” << endl;
     else
        cout << *(location) << ” ” << *(location+1) << ” 找到了!” << endl;     
     return 0;

}

 

代码会返回&array[2],因为这里a[2]==a[3]为真 因为找到了匹配的数据,所以不会再向后查找.

所以程序会输出“4 4找到了!”

如果没有找到,那么会返回数组最后一个元素的下一个元素,如果是迭代器,那么就会返回和end相等的迭代器。

 

和大多数函数一样,这个函数同样有一个谓词版,所谓谓词版就是我们自己可以指定它的规则,这个函数是找相邻两个元素相等的第一个元素位置,我们同样可以用它找一组相邻元素,其中第二个元素大于第一个的位置 我们可以将上面中的部分改为如下代码

location = adjacent_find(array,array + ARRAY_SIZE,less<int>());
     if(array+ARRAY_SIZE == location)
         cout << ” 没有找到!” << endl;
     else
         cout << *(location) << ” ” << *(location+1) << ” 找到了!” << endl;   

然后函数就会返回满足第一个元素小于第二个元素的一组数据中第一个元素的地址

程序的输出结果就会是“1 2 找到了!”

以上均为个人观点,如果有错误,请大家指正,如果有什么地方没有说明白也可以在下面留言。

 

参考资料:http://www.cplusplus.com/reference/algorithm/adjacent_find/

2015-09-15