如何告诉boost :: split_iterator在字符串中间开始?

时间:2013-09-21 01:17:40

标签: c++ boost split iterator range

我想在字符串中迭代标记:

 #include <boost/algorithm/string.hpp>

  using namespace boost::algorithm;
  typedef split_iterator<std::string::const_iterator> SplitIter;
  for(SplitIter i = make_split_iterator(str, token_finder(is_space()));
      i != SplitIter(); ++i)
    std::cout << *i << std::endl; // prints token

这种使用split_iterator的方法对我来说是理想的,因为它不会将匹配复制到一个向量中,而只是迭代它找到的范围,所以它非常有效。

现在,我如何修改它以便拆分迭代器在str[5]开始搜索,例如,而不是在字符串的开头?当然,因为我想避免不必要的复制,所以我不想在子字符串副本str.substr(5)上进行搜索。

1 个答案:

答案 0 :(得分:4)

你可以自己构建迭代器:

  for(SplitIter i = split_iterator<std::string::const_iterator>(
                          str.begin() + 5,
                          str.end(),
                          token_finder(is_space()));
      i != SplitIter(); ++i)
    std::cout << *i << '\n'; // prints token