[C++-sig] Re: Optimize vector_indexing_suite set_slice

Joel de Guzman joel at boost-consulting.com
Tue Aug 10 05:13:04 CEST 2004


David Abrahams wrote:

> Joel de Guzman <joel at boost-consulting.com> writes:
> 
> 
>>Neal D. Becker wrote:
>>
>>
>>>vector_indexing_suite set_slice does: 1) erase 2) insert
>>>Shouldn't this be optimized to simply do copy?
>>
>>You mean this:
>>
>>     container.erase(container.begin()+from, container.begin()+to);
>>     container.insert(container.begin()+from, v);
>>
>>Pardon me for being slow, but how? Could you spell it out for me?
> 
> 
> It's not as simple as "copy", but if you think hard about it you can
> see how to avoid any redundant moves or copies.  The pseudocode is
> complicated so I'm not writing it out in full here, but:
> 
> if new_size <= old_size:
>    erase(old_finish + (new_size - old_size), old_finish)
>    if new_size < old_size:
>       copy(new_start, new_finish, old_start)
> else:
>    # fill in the details here

I see. Yeah, same ol' buffer management. Ok, I'll optimize it.
But it'll have to be after 1.32. Ok?

Cheers,
-- 
Joel de Guzman
http://www.boost-consulting.com
http://spirit.sf.net



More information about the Cplusplus-sig mailing list