Boost logo

Boost Users :

Subject: Re: [Boost-users] Range - Char literal question
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2010-10-19 05:49:53


On Mon, Oct 18, 2010 at 9:24 PM, Rao, Anant <Anant.Rao_at_[hidden]>wrote:

>
> Hi,
>
>
>
> I need to iterate thru strings (For various reasons, I can’t use string or
> vector<char> containers).
>
> I found that boost::range exactly fits the bill for me. I get all the
> convenience of an iterator (from as_literal.hpp).
>
>
>
> I have a piece of code
>
> char* char_s = "I am fine";
>
> char *cp;
>
> std::size_t sz = strlen(char_s);
>
> const char* str_end1 = str_begin( char_s ) + sz;
>
>
>
> for (cp = str_begin(char_s); cp != str_end(char_s); ++cp)
>
> cout << *cp;
>
>
>
> I have couple of questions:
>
>
>
> 1. In the loop, boost::range seems to be calling strlen every
> iteration. This is an overhead. I was wondering if there’s a way I can pass
> in the length myself so that boost::range would use it and avoid calling
> strlen().
>
> 2. If it’s not possible, is there a way for me to use iterators
> (boost or non-boost) over char strings?
>
>
I'm not entirely sure I understand your question, but does this meet your
needs...

std::for_each( boost::begin(char_s), boost::end(char_s), your_functor );

or even

BOOST_FOREACH( char c, char_s )
{
    cout << c;
}

HTH

- Rob.



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