当前位置: 首页 > article >正文

C++ STL adjacent_find 用法与实现

一:功能

        在一个容器中查找相邻元素对,比如查找出相等的两个相邻元素,或查找满足给定条件的两个相邻元素。

二:用法

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> data = { 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9 };
    auto it1 = std::adjacent_find(data.begin(), data.end());
    std::cout << "*it1 == " << *it1 << ", *std::next(it1) == " << *std::next(it1) << "\n";

    auto it2 = std::adjacent_find(data.begin(), data.end(),
        [](int l, int r) { return l + r > 10; });
    std::cout << "*it2 == " << *it2 << ", *std::next(it2) == " << *std::next(it2) << "\n";
}

三:实现

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 BinaryPred>
ForwardIt adjacent_find(ForwardIt first, ForwardIt last, BinaryPred p)
{
    if (first == last)
        return last;
 
    ForwardIt next = first;
    ++next;
 
    for (; next != last; ++next, ++first)
        if (p(*first, *next))
            return first;
 
    return last;
}

 


http://www.kler.cn/a/282417.html

相关文章:

  • JS学习日记(jQuery库)
  • 算法沉淀一:双指针
  • leetcode面试 150题之 三数之和 复刷日记
  • Python酷库之旅-第三方库Pandas(218)
  • node对接ChatGpt的流式输出的配置
  • Fish Agent V0.13B:Fish Audio的语音处理新突破,AI语音助手的未来已来!
  • VMware16安装包+详细安装教程
  • 虚拟机Ubuntu误操作导致无法自动联网的解决办法
  • (第三十七天)
  • Unity(2022.3.41LTS) - 着色器
  • 【自由能系列(初级)】大脑功能与贝叶斯计算——深层生成模型的自由能原理
  • junit格式报告解析工具
  • shell脚本-采集容器内自定义端口tcp连接数并通过http接口推送到Prometheus
  • Ruby 多线程
  • UTONMOS:探索未来游戏的元宇宙纪元新篇章
  • 微知-nandflash和norflash名字为什么叫nand和nor?主要区别是什么?
  • js | XMLHttpRequest
  • 【QT | 开发环境搭建】Linux系统(Ubuntu 18.04) 安装 QT 5.12.12 开发环境
  • MyBatis 源码解析:Environment 与 DataSource 配置实现
  • 【网络安全】服务基础第一阶段——第五节:Windows系统管理基础---- DHCP部署与安全
  • 您应该让 ChatGPT 控制您的浏览器吗?
  • VTK+Qt+Cmake+VS的环境搭建
  • 数据赋能(188)——开发:数据产品——影响因素、直接作用、主要特征
  • 黑马程序员Python机器学习|1机器学习概述
  • oracle日常训练
  • 面试专题:如何对对象的部分属性按序访问