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

Ralf W. Grosse-Kunstleve rwgk at yahoo.com
Tue Aug 10 19:46:24 CEST 2004

--- "Neal D. Becker" <ndbecker2 at verizon.net> wrote:
> 3. This limitation (lack of optimization to operate directly on slices) may
> not be very important in many cases, you could just do:
>   Suppose we have a a vector v, and want to modify a slice of v using alg F:
>   w = F (v[2:4]) # compute result from slice
>   v[2:4] = w #splice in result
> 4. But it's even worse than it looks, because the "splice in result" will
> actually call erase and insert, instead of just copy.


I've solved this problem in a different way. I am using two types of
"selections" which may be understood as generalization of slices:

  - type 1: selection array of bools, same size as data array
  - type 2: selection array of std::size_t

Generalized slicing works like this:


And now the other way (without using erase and insert):

  v.set_selected(selection_array, data_array_of_suitable_size)

I find that I don't use regular slicing very much, but the generalized slicing
is used all over the place in our apps.

I am carefully avoiding "slice references" because it is a Pandora's box and
can easily backfire performance-wise. If I had an exceptional case where
copying a slice is prohibitive I'd code up a specialized C++ function and wrap
it with Boost.Python.


Do you Yahoo!?
Yahoo! Mail - 50x more storage than other providers!

More information about the Cplusplus-sig mailing list