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_tailfind_token