std::adjacent_find 用法
描述:
寻找容器中相继相等的首个元素。
用 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 用法相关推荐
- boost::hana::ext::std::vector_tag用法的测试程序
boost::hana::ext::std::vector_tag用法的测试程序 实现功能 C++实现代码 实现功能 boost::hana::ext::std::vector_tag用法的测试程序 ...
- std::map用法
std::map用法 STL是标准C++系统的一组模板类,使用STL模板类最大的好处就是在各种C++编译器上都通用. 在STL模板类中,用于线性数据存储管理的类主要有vector, list, map ...
- std::tuple、std::tie(可用于结构体大小比较)、std::pair用法
1.tuple应用: 解释:是一个元组,可包含无限多不同类型变量,pair的升级版,但没有pair得成员变量first.second. 1.1.代码: // tuple example #includ ...
- 转: std::string用法详解
原文地址为: 转: std::string用法详解 C++中的string 类 简单介绍 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱 ...
- 【C++】浮点数的std::fixed、std::setprecision()、std::setw()用法
[C++]50.浮点数的std::fixed.std::setprecision().std::setw()用法 C++中std::setw()的用法 1. std::fixed() #include ...
- 【C++标准库】std::string用法指南源码剖析
文章目录 1.ASCII码 (1)计算机如何表达字符 2.C 语言中的字符类型 char (1)思想:char 即整数 (3)C 语言帮手函数 (4)C语言中的字符串 (4)C 语言转义符 3.C++ ...
- std::function用法详解
std::function用法详解 代码在:VCCommon/functionDemo std::function 简介 类模板 std :: function 是一个通用的多态函数包装器. std ...
- C++/C++11中std::string用法汇总
C++/C++11中std::string是个模板类,它是一个标准库.使用string类型必须首先包含<string>头文件.作为标准库的一部分,string定义在命名空间std中. st ...
- c语言rank需要头文件吗,C++ std::rank用法及代码示例
头文件中存在C++ STL的std::rank模板. C++ STL的std::rank模板用于查找类型T的等级.此函数返回类型T的等级. 头文件: #include 模板类别: template s ...
- std::string用法总结
c++stdstring 在平常工作中经常用到了string类,本人记忆了不好用到了的时候经常要去查询.在网上摘抄一下总结一下,为以后的查询方便: string类的构造函数: string(const ...
最新文章
- CSP 201812-1 小明上学 Python实现+详解
- CSS盒模型及边距问题
- java awt 监视器_java – 停止所有Awt / Swing线程和监视器和东...
- POJ - 3714 Raid(平面最近点对模板题,几何)
- HDU - 4565 So Easy!(共轭构造+推公式+矩阵快速幂)
- App-V5.0服务器部署
- MaxKey单点登录认证系统 v2.4.0 RC
- Scrapy(一)爬知乎所有用户信息
- FRR BGP协议分析13 -- ZEBRA路由的处理2
- Android远程过程通讯,Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析(3)...
- TP框架Queue队列使用
- WPF 入门教程打印控件
- redis指定配置文件启动不生效_redis配置文件不生效
- qt_翻译文件常用缩写
- Bootstrap可视化布局
- 算法6.7BFS 算法6.8-6.9最小生成树
- Android webview支持H5页面通过js实现文件上传、图片上传
- 深度学习在静息态功能磁共振成像中的应用
- 如何免费将多个PDF合并成一个PDF文件?
- 多通道主控的多CE NAND Flash 动态块模型
热门文章
- EF MYSQL批量更新_Entity Framework Core 5中实现批量更新、删除
- AI语音机器人有哪些需要注意事项
- 华南师大考研旅游管理系2010-2016年分数线汇总
- 为防止已存储信息的u盘感染计算机病毒应该,为防止插入U盘后,通过U盘自动播放功能,被感染计算机病毒,应该将计算机中“自 - 问答库...
- 2021-01-19 灵动ICPC集训
- shel脚本基础系列(二)语法+运算+判断
- 《王二丫的甜品店》技术支持网址
- bootstrap怎么强制不换行_Bootstrap方法的软件实现
- Blackhat2017:如何利用PostScript语言入侵打印机
- 计算机专业有必要数学竞赛吗,高中数学竞赛必要吗