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