[section:search search]

[heading Prototype]

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

template<class ForwardRange1, class ForwardRange2>
typename range_iterator<const ForwardRange1>::type
search(const ForwardRange1& rng1, const ForwardRange2& rng2);

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

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


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

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

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

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

[heading Description]

The versions of `search` that return an iterator, return an iterator to the start of the first subsequence in `rng1` that is equal to the subsequence `rng2`. The `end(rng1)` is returned if no such subsequence exists in `rng1`.
Equality is determined by `operator==` for non-predicate versions of `search`, and by satisfying `pred` in the predicate versions.

The versions of `search` 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/search.hpp`

[heading Requirements]

[*For the non-predicate versions:]

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

[*For the predicate versions:]

* `ForwardRange1` is a model of the __forward_range__ Concept.
* `ForwardRange2` is a model of the __forward_range__ Concept.
* `BinaryPredicate` is a model of the `BinaryPredicateConcept`.
* `ForwardRange1`'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]

Average complexity is Linear. Worst-case complexity is quadratic.

[endsect]


