# std::default_searcher

< cpp‎ | utility‎ | functional

定义于头文件 `<functional>` |  |
template< class ForwardIt, class BinaryPredicate = std::equal_to<> > class default_searcher; |  | (C++17 起)

适合用于 std::search 的搜索器 (Searcher) 重载的类，它将搜索操作委派到 C++17 前标准库的 std::search 。

`default_searcher` 是为可复制构造 (CopyConstructible) 及可复制赋值 (CopyAssignable) 。

### 成员函数

## std::default_searcher::default_searcher

default_searcher( ForwardIt pat_first, ForwardIt pat_last, BinaryPredicate pred = BinaryPredicate()); |  | (C++17 起) (C++20 前)
constexpr default_searcher( ForwardIt pat_first, ForwardIt pat_last, BinaryPredicate pred = BinaryPredicate()); |  | (C++20 起)

以存储 `pat_first` 、 `pat_last` 及 `pred` 的副本构造一个 `default_searcher`

### 参数

pat_first, pat_last | - | 指代要搜索的串的一对迭代器
pred | - | 用于检测相等的可调用对象

### 异常

任何 `BinaryPredicate` 或 `ForwardIt` 的复制构造函数可能抛出的异常。

## std::default_searcher::operator()

template< class ForwardIt2 > std::pair<ForwardIt2, ForwardIt2> operator()( ForwardIt2 first, ForwardIt2 last ) const; |  | (C++17 起) (C++20 前)
template< class ForwardIt2 > constexpr std::pair<ForwardIt2, ForwardIt2> operator()( ForwardIt2 first, ForwardIt2 last ) const; |  | (C++20 起)

std::search 的搜索器 (搜索器 (Searcher) ) 重载调用此函数以进行用此搜索器的搜索。

返回一对迭代器 `i, j` ，其中 `i` 为 std::search(first, last, pat_first, pat_last, pred) 且 `j` 为 std::next(i, std::distance(pat_first, pat_last)) ，除非 `std::search` 返回 `last` （无匹配），此情况下 `j` 也等于 `last` 。

### 参数

first, last | - | 指代要检验的字符串的一对迭代器

### 返回值

分别指向 [first, last) 中首位置和尾后一位的一对迭代器，其中定位的子序列按 `pred` 所定义与 [pat_first, pat_last) 比较相等，其他情况返回一对 `last` 的副本。

### 示例

    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <functional>

    int main()
    {
        std::string in = "Lorem ipsum dolor sit amet, consectetur adipiscing elit,"
                         " sed do eiusmod tempor incididunt ut labore et dolore magna aliqua";
        std::string needle = "pisci";
        auto it = std::search(in.begin(), in.end(),
                       std::default_searcher(
                           needle.begin(), needle.end()));
        if(it != in.end())
            std::cout << "The string " << needle << " found at offset "
                      << it - in.begin() << '\n';
        else
            std::cout << "The string " << needle << " not found\n";
    }

输出：

    The string pisci found at offset 43

### 参阅

search | 搜索一个元素范围 (函数模板)