
Peter Dimov skrev:
Thorsten Ottosen:
Peter Dimov skrev: ....
for x in w if pred(x) v.push_back(x)
The typical number of elements satisfying pred may be ~7.1, so making v have a stack capacity of 8 will eliminate a heap allocation and will be a big win. But you can't determine the maximum capacity in advance.
Is it not |w|?
Yes, it technically is bounded by |w|. But using |w| as the capacity of v defeats the purpose of the optimization, which is to avoid allocating storage for |w| elements (typically on the heap).
But then you can't know if using auto_buffer is an optimization. If I use auto_buffer<T> buffer(|w|) I risk that the buffer must be resized several times. If it must be resize only once, simply using vector + reserve() would be at least as good. -Thorsten