[section:find_first_of find_first_of]

[heading Prototype]

``
template<class SinglePassRange1, class ForwardRange2>
typename range_iterator<SinglePassRange1>::type
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2);

template<
    class SinglePassRange1,
    class ForwardRange2,
    class BinaryPredicate
    >
typename range_iterator<SinglePassRange1>::type
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);

template<
    range_return_value re,
    class SinglePassRange1,
    class ForwardRange2
    >
typename range_return<SinglePassRange1, re>::type
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2);

template<
    range_return_value re,
    class SinglePassRange1,
    class ForwardRange2,
    class BinaryPredicate
    >
typename range_return<SinglePassRange1, re>::type
find_first_of(SinglePassRange1& rng1, const ForwardRange2& rng2, BinaryPredicate pred);
``

[heading Description]

The versions of `find_first_of` that return an iterator, return an iterator to the first occurrence in `rng1` of any of the elements in `rng2`.
Equality is determined by `operator==` for non-predicate versions of `find_first_of`, and by satisfying `pred` in the predicate versions.

The versions of `find_first_of` that return a `range_return`, defines `found` in the same manner as the returned iterator described above.

[heading Definition]

Defined in the header file `boost/range/algorithm/find_first_of.hpp`

[heading Requirements]

[*For the non-predicate versions:]

* `SinglePassRange1` is a model of the __single_pass_range__ Concept.
* `ForwardRange2` is a model of the __forward_range__ Concept.
* `SinglePassRange1`'s value type is a model of the `EqualityComparableConcept`, and can be compared for equality with `ForwardRange2`'s value type.

[*For the predicate versions:]

* `SinglePassRange1` is a model of the __single_pass_range__ Concept.
* `ForwardRange2` is a model of the __forward_range__ Concept.
* `BinaryPredicate` is a model of the `BinaryPredicateConcept`.
* `SinglePassRange1`'s value type is convertible to `BinaryPredicate`'s first argument type.
* `ForwardRange2`'s value type is convertible to `BinaryPredicate`'s second argument type.

[heading Complexity]

At most `distance(rng1) * distance(rng2)` comparisons.

[endsect]


