2013-09-21 139 views
0

我想遍歷字符串中的標記:如何判斷boost :: split_iterator是否在字符串中間開始?

#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)上進行搜索。

回答

3

你可以建立自己的迭代器:

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 
相關問題