Apache C++ Standard Library Reference Guide

## find_if()

Library: Algorithms

    Function

- Local Index
- Summary
- Synopsis
- Description
- Complexity
- Example
- See Also
- Standards Conformance

### Local Index

No Entries

### Summary

Algorithm that finds an occurrence of a value in a sequence that satisfies a specified predicate

### Synopsis

    #include <algorithm>

    namespace std {
      template <class InputIterator, class Predicate>
      InputIterator find_if(InputIterator start,
                            InputIterator finish,
                            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 `start` and `finish`, 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 `[start, finish)` for which the following condition holds:

`pred(*i) == true.`

If no such iterator is found, `find_if()` returns `finish`.

### Complexity

`find_if()` performs at most `finish-start` applications of the corresponding predicate.

### Example

    //
    //  find.cpp
    //

    #include <vector>      // for vector
    #include <algorithm>   // for adjacent_find, find
    #include <functional>  // for bind1st, equal_to
    #include <iostream>    // for cout, endl

    int main ()
    {
        // Typedef for convenience.
        typedef std::vector<int, std::allocator<int> > Vector;

        const Vector::value_type arr[] = { 0, 1, 2, 2, 3,
                                           4, 2, 2, 6, 7 };

        // Set up a vector.
        const Vector v1 (arr, arr + sizeof arr / sizeof *arr);

        // Try find.
        Vector::const_iterator it = std::find (v1.begin (),
                                               v1.end (), 3);

        std::cout << *it << ' ';

        // Try find_if.
        it = std::find_if (v1.begin (), v1.end (),
                 std::bind1st (std::equal_to<Vector::value_type>(),
                 3));

        std::cout << *it << ' ';

        // Try both adjacent_find variants.
        it = std::adjacent_find (v1.begin (), v1.end ());

        std::cout << *it << ' ';

        it = std::adjacent_find (v1.begin (), v1.end (),
                              std::equal_to<Vector::value_type>());

        std::cout << *it << std::endl;

        return 0;
    }

    Program Output:

    3 3 2 2

### See Also

`adjacent_find()`, Algorithms, `find()`, `find_end()`, `find_first_of()`

### Standards Conformance

ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 25.1.2