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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑不溜秋的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值