描述:
       寻找容器中相继相等的首个元素。
       用 operator== 比较元素。

定义:

template< class ForwardIt >
ForwardIt adjacent_find( ForwardIt first, ForwardIt last );template< class ForwardIt >
constexpr ForwardIt adjacent_find( ForwardIt first, ForwardIt last );
template< class ForwardIt, class BinaryPredicate>
ForwardIt adjacent_find( ForwardIt first, ForwardIt last, BinaryPredicate p );template< class ForwardIt, class BinaryPredicate>
constexpr ForwardIt adjacent_find( ForwardIt first, ForwardIt last, BinaryPredicate p );

可能的实现:

template<class ForwardIt>
ForwardIt adjacent_find(ForwardIt first, ForwardIt last)
{if (first == last) {return last;}ForwardIt next = first;++next;for (; next != last; ++next, ++first) {if (*first == *next) {return first;}}return last;
}
template<class ForwardIt, class BinaryPredicate>
ForwardIt adjacent_find(ForwardIt first, ForwardIt last, BinaryPredicate p)
{if (first == last) {return last;}ForwardIt next = first;++next;for (; next != last; ++next, ++first) {if (p(*first, *next)) {return first;}}return last;
}

参数:
       first, last - 要检验的元素范围
       p - 若元素应被当做相等则返回 ​true 的二元谓词。

返回值:
       返回首对等同元素的首个元素的迭代器,若找不到这种元素,则返回 last 。

示例:

#include <iostream>
#include <algorithm>
#include <vector>int main()
{std::vector<int> v = {1,2,2,3,4,5};auto iter = std::adjacent_find(v.begin(), v.end());if (iter == v.end())std::cout << "容器中不存在相继相等元素" << std::endl;else{int nIndex = std::distance(std::begin(v), iter);std::cout << "元素索引:" << nIndex << std::endl;//元素索引:1}return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>struct SData
{int m_nData;double m_dData;SData(int nData, double dData):m_nData(nData),m_dData(dData){}
};int main()
{std::vector<SData> v;for (int i = 0; i < 5; i++){SData data(i,i);if (i == 2){v.push_back(data);}v.push_back(data);}//使用lambda表达式指定条件(一般用于自定义元素)auto iter = std::adjacent_find(v.begin(), v.end(), [](const SData& data1,const SData& data2) {return data1.m_nData == data2.m_nData;});if (iter == v.end())std::cout << "容器中不存在相继相等元素" << std::endl;else{int nIndex = std::distance(std::begin(v), iter);std::cout << "元素索引:" << nIndex << std::endl;//元素索引:2}return 0;
}

std::adjacent_find 用法相关推荐

  1. boost::hana::ext::std::vector_tag用法的测试程序

    boost::hana::ext::std::vector_tag用法的测试程序 实现功能 C++实现代码 实现功能 boost::hana::ext::std::vector_tag用法的测试程序 ...

  2. std::map用法

    std::map用法 STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用. 在STL模板类中,用于线性数据存储管理的类主要有vector, list, map ...

  3. std::tuple、std::tie(可用于结构体大小比较)、std::pair用法

    1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...

  4. 转: std::string用法详解

    原文地址为: 转: std::string用法详解  C++中的string 类 简单介绍 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱 ...

  5. 【C++】浮点数的std::fixed、std::setprecision()、std::setw()用法

    [C++]50.浮点数的std::fixed.std::setprecision().std::setw()用法 C++中std::setw()的用法 1. std::fixed() #include ...

  6. 【C++标准库】std::string用法指南源码剖析

    文章目录 1.ASCII码 (1)计算机如何表达字符 2.C 语言中的字符类型 char (1)思想:char 即整数 (3)C 语言帮手函数 (4)C语言中的字符串 (4)C 语言转义符 3.C++ ...

  7. std::function用法详解

    std::function用法详解 代码在:VCCommon/functionDemo std::function 简介 类模板 std :: function 是一个通用的多态函数包装器. std ...

  8. C++/C++11中std::string用法汇总

    C++/C++11中std::string是个模板类,它是一个标准库.使用string类型必须首先包含<string>头文件.作为标准库的一部分,string定义在命名空间std中. st ...

  9. c语言rank需要头文件吗,C++ std::rank用法及代码示例

    头文件中存在C++ STL的std::rank模板. C++ STL的std::rank模板用于查找类型T的等级.此函数返回类型T的等级. 头文件: #include 模板类别: template s ...

  10. std::string用法总结

    c++stdstring 在平常工作中经常用到了string类,本人记忆了不好用到了的时候经常要去查询.在网上摘抄一下总结一下,为以后的查询方便: string类的构造函数: string(const ...

最新文章

  1. CSP 201812-1 小明上学 Python实现+详解
  2. CSS盒模型及边距问题
  3. java awt 监视器_java – 停止所有Awt / Swing线程和监视器和东...
  4. POJ - 3714 Raid(平面最近点对模板题,几何)
  5. HDU - 4565 So Easy!(共轭构造+推公式+矩阵快速幂)
  6. App-V5.0服务器部署
  7. MaxKey单点登录认证系统 v2.4.0 RC
  8. Scrapy(一)爬知乎所有用户信息
  9. FRR BGP协议分析13 -- ZEBRA路由的处理2
  10. Android远程过程通讯,Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析(3)...
  11. TP框架Queue队列使用
  12. WPF 入门教程打印控件
  13. redis指定配置文件启动不生效_redis配置文件不生效
  14. qt_翻译文件常用缩写
  15. Bootstrap可视化布局
  16. 算法6.7BFS 算法6.8-6.9最小生成树
  17. Android webview支持H5页面通过js实现文件上传、图片上传
  18. 深度学习在静息态功能磁共振成像中的应用
  19. 如何免费将多个PDF合并成一个PDF文件?
  20. 多通道主控的多CE NAND Flash 动态块模型

热门文章

  1. EF MYSQL批量更新_Entity Framework Core 5中实现批量更新、删除
  2. AI语音机器人有哪些需要注意事项
  3. 华南师大考研旅游管理系2010-2016年分数线汇总
  4. 为防止已存储信息的u盘感染计算机病毒应该,为防止插入U盘后,通过U盘自动播放功能,被感染计算机病毒,应该将计算机中“自 - 问答库...
  5. 2021-01-19 灵动ICPC集训
  6. shel脚本基础系列(二)语法+运算+判断
  7. 《王二丫的甜品店》技术支持网址
  8. bootstrap怎么强制不换行_Bootstrap方法的软件实现
  9. Blackhat2017:如何利用PostScript语言入侵打印机
  10. 计算机专业有必要数学竞赛吗,高中数学竞赛必要吗