The Vector implementation we're currently writing can grow by one element in amortized constant time (meaning that any n appends take O(n) time), but each individual insertion is not guaranteed to run in O(1) time. This is because if we run out of space and need to reallocate the internal array, we need to do O(n) work to copy the elements over. Come up with a different way of implementing the Vector so that at, push_back, pop_back, size, and empty all run in worst-case O(1) time. This doesn't mean that they all have to take the same amount of time, but rather that the runtimes don't depend on the size of the Vector. You only need to implement the following functions, but you can do more if you'd like: push_back pop_back at size empty