std::adjacent_find

来自cppreference.com
< cpp‎ | algorithm

 
 
算法库
执行策略 (C++17)
不修改的序列操作
(C++11)
(C++11)
(C++11)
(C++17)
adjacent_find


修改的序列操作
未初始化存储上的操作
划分操作
排序操作
(C++11)
二分查找操作
集合操作(在已排序范围上)
堆操作
(C++11)
最小/最大操作
(C++11)
(C++17)

重排
数值操作
C 库
 
定义于头文件 <algorithm>
template< class ForwardIt >
ForwardIt adjacent_find( ForwardIt first, ForwardIt last );
(1)
template< class ForwardIt, BinaryPredicate p >
ForwardIt adjacent_find( ForwardIt first, ForwardIt last, BinaryPredicate p );
(2)
搜索范围[first, last)为两个连续的相同元素。的第一个版本使用operator==比较的元素,第二个版本使用给定的二元谓词p.
原文:
Searches the range [first, last) for two consecutive identical elements. The first version uses operator== to compare the elements, the second version uses the given binary predicate p.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

目录

[编辑] 参数

first, last -
检查的元素
原文:
the range of elements to examine
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
p - 若元素应被当做相等则返回 ​true 的二元谓词。

谓词函数的签名应等价于如下者:

 bool pred(const Type1 &a, const Type2 &b);

签名不必拥有 const & ,但函数必须不修改传递给它的对象。
类型 Type1Type2 必须使得 ForwardIt 类型的对象能在解引用后隐式转换到这两个类型。

类型要求
-
ForwardIt 必须满足 ForwardIterator 的要求。

[编辑] 返回值

一个迭代器相同的元素。如果没有这样的元素被发现,last返回
原文:
an iterator to the first of the identical elements. If no such elements are found, last is returned
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 复杂度

完全(result - first)和小((last - 1) - first)应用的返回值是的谓词在那里,result.
原文:
Exactly the smaller of (result - first) and ((last - 1) - first) applications of the predicate where result is the return value.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 可能的实现

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

[编辑] 示例

下面的代码是找到一个对等效的整数的数组intergers .
原文:
The following code finds a pair of equivalent integers in an array of intergers.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

#include <algorithm>
#include <iostream>
 
int main()
{
    std::vector<int> v1{0, 1, 2, 3, 40, 40, 5};
 
    std::vector<int>::iterator result;
    result = std::adjacent_find(v1.begin(), v1.end());
 
    if (result == v1.end()) {
        std::cout << "no matching adjacent elements";
    } else {
        std::cout << "match at: " << std::distance(v1.begin(), result);
    }
}

输出:

match at: 4

[编辑] 另请参阅

删除区间内连续重复的元素
(函数模板) [编辑]