Skip to content. Skip to navigation

ICTP Portal

Sections
You are here: Home Manuals on-line PGI Compiler pgC_lib find_if
Personal tools
Document Actions

find_if



Click on the banner to return to the class reference home page.

find_if


Algorithm

Summary

Find an occurrence of value in a sequence that satisfies a specifed predicate.

Data Type and Member Function Indexes
(exclusive of constructors and destructors)

None

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 <iostream.h>
 
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;
 }

Output : 3 3 2 2

Warning

If your compiler does not support default template parameters then you need to always supply the Allocator template argument. For instance you'll have to write:

vector<int, allocator<int> >

instead of:

vector<int>

See Also

adjacent_find, Algorithms, find, find_end, find_first_of


©Copyright 1996, Rogue Wave Software, Inc.


Powered by Plone This site conforms to the following standards: