// ... // out-of-class definitions
template <typename Object>
void ArrayVector<Object>::
removeAtRank(int r) { // remove element at given rank
for (int i = r; i < sz-1; i++)
a[i] = a[i+1]; // shift elements down
sz--;
}
template <typename Object>
void ArrayVector<Object>::
insertAtRank(int r, const Object& e) { // insert element at given rank
if (sz == capacity) overflow(); // handle overflow
for (int i = sz-1; i >= r; i--)
a[i+1] = a[i]; // shift elements up
a[r] = e;
sz++;
}
template <typename Object>
void ArrayVector<Object>::
overflow() { // handle overflow by resizing
capacity *= 2; // double capacity
Object* b = new Object[capacity];
for (int i = 0; i < sz; i++) { // copy contents to new array
b[i] = a[i];
}
delete [] a; // discard old array
a = b; // make b the new array
}