Boost のfind_first
アルゴリズムは C のアルゴリズムを強化したものですstrstr()
が、干し草の山 (検索空間) がconst 以外の参照として渡されるのはなぜですか? 一致する範囲は別iterator_range
のオブジェクトで返されるため、参照による出力の問題ではありません。
make_iterator_rangeによって作成された一時的な範囲での呼び出しを防ぎます。
const std::string str("haystack");
const std::string findstr("stack");
boost::sub_range<const std::string> match = boost::algorithm::find_first(
boost::make_iterator_range(str),
boost::make_iterator_range(findstr));
代わりに、ソース範囲を表すローカル変数を明示的に作成する必要があります。
const std::string str("haystack");
const std::string findstr("stack");
boost::sub_range<const std::string> haystack = boost::make_iterator_range(str);
boost::sub_range<const std::string> match = boost::algorithm::find_first(
haystack,
boost::make_iterator_range(findstr));
(これは、boost/algorithm/string/find.hppの他の関数、つまりfind
, ifind_first
, find_last
, ifind_last
, find_nth
, &ifind_nth
にfind_head
も同様に適用されます)。find_tail
find_token