最終更新日時(UTC):
が更新

履歴 編集

class template
<functional>

std::default_searcher(C++17)

namespace std {
  template <class ForwardIterator1, class BinaryPredicate = equal_to<>>
  class default_searcher;
}

概要

std::default_searcherは、std::search()のデフォルトの検索法で、シーケンス (text) からサブシーケンス (pattern) を検索する関数オブジェクトである。このクラスは、検索器 (searcher) を指定する[std::search()`](/reference/algorithm/search.md)のインタフェースに、デフォルトの検索方法を指定するために定義されている。

このクラスは、コンストラクタおよびクラステンプレートのテンプレート引数で、検索対象となるサブシーケンス (pattern) を登録し、関数呼び出し演算子で全体のシーケンス (text) を指定して検索を実行する。

このアルゴリズムは本来、文字列から部分文字列を検索するためのアルゴリズムであるが、仕様として対象を文字列に限定してはいない。

備考

  • このクラステンプレートは複数のテンプレート引数をもつが、それを容易に使用するためのヘルパ関数 (make_default_searcher()) は定義されていない。これは、C++17で導入されたクラステンプレートパラメータの推論機能と併用することを意図したものである
  • このクラスはstd::search()アルゴリズムと併用することを意図して設計されているが、このクラス単体で使用できる

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++17
operator() 検索を実行する C++17

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

int main()
{
  // text内のpatternを検索する
  //                      xxxx
  std::string text = "babcabaabaac";
  std::string pattern = "abaa";

  // patternを登録
  std::default_searcher searcher {
    pattern.cbegin(),
    pattern.cend()
  };

  // textを指定して検索を実行
  using iterator = std::string::const_iterator;
  iterator result = std::search(text.cbegin(), text.cend(), searcher);

  // 見つかった
  if (result != text.cend()) {
    // 見つかった位置を取得
    std::ptrdiff_t n = std::distance(text.cbegin(), result);

    // 見つかった文字列 (pattern) を取得
    std::string s {result, result + pattern.size()};

    std::cout << n << std::endl;
    std::cout << s << std::endl;
  }
  // 見つからなかった
  else {
    std::cout << "not found" << std::endl;
  }
}

出力

4
abaa

バージョン

言語

  • C++17

処理系

参照