Boost logo

Boost Users :

From: Rich Johnson (rjohnson_at_[hidden])
Date: 2004-05-31 18:36:31


Probably not. There are a couple of things here:
1. The base iterator (string::const_reverse_iterator) scans the string
in reverse. Even if you got the tokens in the order you wanted, their
content would be reversed.
2. The above caveat also applies when parsing multi-character
delimiters.
3. The documentation
(http://www.boost.org/libs/tokenizer/tokenizer.htm ) specifically says:
  "Note: the category of iterator will be at most ForwardIterator"

You can probably do what you want if you first reverse the data string
(and delimiters), then tokenize, and finally reverse the resulting
strings.

Eventually a reverse_iterator facade/adaptor over a bidirectional
tokenizer would do the job; but that's another story.

--rich

On Sunday, May 30, 2004, at 07:56 AM, Jeff Holle wrote:

> I'm using boost v1_31_0 and gcc v3.3.2
>
> In experimenting with boost::tokenizer to meet a requirement that I
> have, I've tried hooking it to a reverse iterator.
> This act produced a run-time error.
>
> This is the code:
> const string test = "One:Two:Three:Four";
> typedef char_separator<char> Sep;
> typedef tokenizer<Sep,string::const_reverse_iterator> Tok;
> Sep sep(":");
> Tok t(test,sep);
> for (Tok::iterator iter=t.end();iter!=t.begin();++iter)
> cout << *iter << endl;
>
> Executing this produces continous output of "garbage".
>
> Switching the ".end()" and ".begin()" references in the for loop
> doesn't fix this problem.
> Switching from "const_reverse_iterator" to "const_iterator" produces
> the following output:
> One
> Two
> Three
> Four
>
> Is there a way to use a reverse iterator with boost:tokenizer?
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net