Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

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

Media Vault

Software Library

Restoration Projects

Artifacts Sought

find_if(3C++)

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

 

NAME

 
find_if
 
 - Finds an occurrence of a value in a sequence that satisfies a specified predicate.
 
 
 

SYNOPSIS

 
 
#include <algorithm>
template <class InputIterator, class Predicate>

InputIterator find_if(InputIterator first,

InputIterator last,
Predicate pred);
 
 
 

DESCRIPTION

 
 
The find_if algorithm allows you to search for the first element in a sequence that satisfies a particular condition. The sequence is defined by iterators first and last, while the condition is defined by the third argument: a predicate function that returns a boolean value. find_if returns the first iterator i in the range [first, last) for which the following condition holds:
 
pred(∗i) == true.
 
If no such iterator is found, find_if returns last. 
 
 
 

COMPLEXITY

 
 
find_if performs at most last-first applications of the corresponding predicate. 
 
 
 

EXAMPLE

 
 
 

/
// find.cpp
//
#include <vector>
#include <algorithm>
#include <functional>
#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);

// it1 = v1.begin() + 4;

 

// Try find_if

iterator it2 =

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

// it2 = v1.begin() + 4

 

// Try both adjacent_find variants

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

// it3 = v1.begin() +2

 

iterator it4 =

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

// v4 = v1.begin() + 2

 

// 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

 
 
adjacent_find, Algorithms, find,_find_end, find_first_of
 

Rogue Wave Software  —  Last change: 02 Apr 1998

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