Boost 的find_first
算法是 C 算法的升级版strstr()
,但是为什么大海捞针——搜索空间——作为非常量引用传入呢?匹配范围在单独的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
)。