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

David Abrahams dave at boost-consulting.com
Tue Aug 10 15:14:58 CEST 2004


Joel de Guzman <joel at boost-consulting.com> writes:

> 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?

Sure thing.

-- 
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com




More information about the Cplusplus-sig mailing list