[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):
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