void resize() { array<T> b(max(1, 2*n)); std::copy(a+0, a+n, b+0); a = b; } void add(int i, T x) { if (n + 1 > a.length) resize(); std::copy_backward(a+i, a+n, a+n); a[i] = x; n++; }
These functions are usually highly optimized and may even use special
machine instructions that can do this copying much faster than we could do
using a
loop. Although using these functions does not asymptotically
decrease the running times, it can still be a worthwhile optimization.
In the C++ implementations here, the use of
resulted in speedups of a factor of 2-3 depending on the types of
operations performed. Your mileage may vary.
opendatastructures.org