In C, I would have done it using realloc
.
In C++, one would normally consider using the STL vector
class.
But how do I properly res
If you insist on doing this yourself in C++, you probably want to do roughly like std::vector
does, and allocate raw memory using the global new operator, then use placement new to create objects "in place".
Otherwise, you end up constructing objects in all the memory you allocate, and then assigning over them when you use them. Unless you know that the initial (default) object construction is lightweight, you'd rather avoid it if possible.
There is no good equivalent of realloc
in C++. You'll need to manually duplicate the array and copy the old elements over. Fortunately, thanks to the std::copy
function in <algorithm>
, this isn't too bad:
size_t k = /* ... */
T* buffer = /* .. get old buffer of size k. .. */
T* newBuffer = new T[newSize]; // Assume newSize >= k
std::copy(buffer, buffer + k, newBuffer);
delete [] buffer;
buffer = newBuffer;
Hope this helps!
EDIT: Reordered the last two lines! Whoops!
By doing what vector and realloc do internaly: make a new, bigger array, copy the content of the old one, and destroy the old one.
int* arr = new int[20];
...
//wanna resize to 25?
int* temp = new int[25];
std::copy(arr, arr+20, temp);
delete [] arr;
arr = temp;
... //now arr has 25 elements
But, of course, you shouldn't do this :)