boost :: split pozostawia puste tokeny na początku i na końcu łańcucha - czy jest to pożądane zachowanie?

Ponieważ nie mogłem znaleźć niczego na ten temat wdokumentacja, Myślałem, że o to pytam. Mam następujący program (C ++ 11):

<code>#include <iostream> 
#include <boost/algorithm/string.hpp>

using namespace std;
using namespace boost;

int main () {
    string tmp = " #tag #tag1#tag2  #tag3 ####tag4   ";
    list<iterator_range<string::iterator> > matches;
    split( matches, tmp, is_any_of("\t #"), token_compress_on );

    for( auto match: matches ) {
            cout << "'" << match << "'\n";
    }
}
</code>

Dane wyjściowe to:

<code>''
'tag'
'tag1'
'tag2'
'tag3'
'tag4'
''
</code>

Myślałem, żetoken_compress_on opcja usuwa wszystkie puste tokeny. Rozwiązaniem jest na przykład użycieboost::trim_if. Niemniej jednak zastanawiałem się, czy jest to pożądane zachowanie boost :: split i dlaczego tak się dzieje?

(g ++ 4.6.3, boost 1.48)

questionAnswers(3)

yourAnswerToTheQuestion