  Category: algorithms Component type: function

### Prototype

Adjacent_find is an overloaded name; there are actually two adjacent_find functions.
```template <class ForwardIterator>
ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last);

template <class ForwardIterator, class BinaryPredicate>
ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last,
BinaryPredicate binary_pred);
```

### Description

The first version of adjacent_find returns the first iterator i such that i and i+1 are both valid iterators in [first, last), and such that *i == *(i+1). It returns last if no such iterator exists.

The second version of adjacent_find returns the first iterator i such that i and i+1 are both valid iterators in [first, last), and such that binary_pred(*i, *(i+1)) is true. It returns last if no such iterator exists.

### Definition

Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.

### Requirements on types

For the first version:
For the second version:
• ForwardIterator is a model of Forward Iterator.
• ForwardIterator's value type is convertible to BinaryPredicate's first argument type and to its second argument type.

### Preconditions

• [first, last) is a valid range.

### Complexity

Linear. If first == last then no comparison are performed; otherwise, at most (last - first) - 1 comparisons.

### Example

Find the first element that is greater than its successor.
```int A[] = {1, 2, 3, 4, 6, 5, 7, 8};
const int N = sizeof(A) / sizeof(int);

const int* p = adjacent_find(A, A + N, greater<int>());

cout << "Element " << p - A << " is out of order: "
<< *p << " > " << *(p + 1) << "." << endl;
```