Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ adjacent_find(3C++) — Sun WorkShop 5.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

adjacent_find(3C++)

Standard C++ Library
Copyright 1998, Rogue Wave Software, Inc.

 

NAME

 
adjacent_find
 
 - Find the first adjacent pair of elements in a sequence that are equivalent.
 
 
 

SYNOPSIS

 
 
#include <algorithm>
template <class ForwardIterator>

ForwardIterator
adjacent_find(ForwardIterator first,

ForwardIterator last);

 
template <class ForwardIterator, class BinaryPredicate>
ForwardIterator

adjacent_find(ForwardIterator first, ForwardIterator last,

BinaryPredicate pred);
 
 
 

DESCRIPTION

 
 
There are two versions of the adjacent_find algorithm. The first finds equal adjacent elements in the sequence defined by iterators first and last and returns an iterator i pointing to the first of the equal elements. The second version lets you specify your own binary function to test for a condition. It returns an iterator i pointing to the first of the pair of elements that meet the conditions of the binary function. In other words, adjacent_find returns the first iterator i such that both i and i + 1 are in the range [first, last) for which one of the following conditions holds:
 
∗i == ∗(i + 1)
 
or
 
pred(∗i,∗(i + 1)) == true
 
If adjacent_find does not find a match, it returns last. 
 
 
 

COMPLEXITY

 
 
adjacent_find performs exactly find(first,last,value) - first applications of the corresponding predicate. 
 
 
 

EXAMPLE

 
 
 

//
// find.cpp
//
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
 
int main()

{

typedef vector<int>::iterator iterator;
int d1[10] = {0,1,2,2,3,4,2,2,6,7};

 

// Set up a vector

vector<int> v1(d1,d1 + 10);

 

// Try find

iterator it1 = find(v1.begin(),v1.end(),3);

 

// Try find_if

iterator it2 =

find_if(v1.begin(),v1.end(),bind1st(equal_to<int>(),3));

 

// Try both adjacent_find variants

iterator it3 = adjacent_find(v1.begin(),v1.end());

 

iterator it4 =

adjacent_find(v1.begin(),v1.end(),equal_to<int>());

 

// Output results

cout << ∗it1 << " " << ∗it2 << " " << ∗it3 << " "

<< ∗it4 << endl;

 

return 0;

}
 

Program Output :
 
 
 

 
3 3 2 2
 
 
 

WARNINGS

 
 
If your compiler does not support default template parameters, then you always need to supply the Allocator template argument. For instance, you have to write:
 
vector<int,allocator<int> >
 
instead of:
 
vector<int>
 
If your compiler does not support namespaces, then you do not need the using declaration for std. 
 
 
 

SEE ALSO

 
 
find
 

Rogue Wave Software  —  Last change: 02 Apr 1998

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026