Skip to content

Latest commit

 

History

History
104 lines (83 loc) · 3.99 KB

default_searcher.md

File metadata and controls

104 lines (83 loc) · 3.99 KB

default_searcher

  • functional[meta header]
  • std[meta namespace]
  • class template[meta id-type]
  • cpp17[meta cpp]
namespace std {
  template <class ForwardIterator1, class BinaryPredicate = equal_to<>>
  class default_searcher;
}
  • equal_to[link equal_to.md]

概要

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;
  }
}
  • std::default_searcher[color ff0000]
  • std::search[link /reference/algorithm/search.md]
  • pattern.cbegin()[link /reference/string/basic_string/cbegin.md]
  • pattern.cend()[link /reference/string/basic_string/cend.md]
  • text.cbegin()[link /reference/string/basic_string/cbegin.md]
  • text.cend()[link /reference/string/basic_string/cend.md]
  • std::ptrdiff_t[link /reference/cstddef/ptrdiff_t.md]

出力

4
abaa

バージョン

言語

  • C++17

処理系

参照