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 between 2 and 3, depending on the types of operations performed. Your mileage may vary.
opendatastructures.org