I have the need to store a list/collection/array of dynamically created objects of a certain base type in C++ (and I’m new to C++). In C# I’d use a generic collection, what do I use in C++?
I know I can use an array:
SomeBase* _anArrayOfBase = new SomeBase[max];
But I don’t get anything ‘for free’ with this – in other words, I can’t iterate over it, it doesn’t expand automatically and so on.
So what other options are there?
Thanks
There is std::vector which is a wrapper around an array, but it can expand and will do automatically. However, it is a very expensive operation, so if you are going to do a lot of insertion or removal operations, don’t use a vector. (You can use the reserve function, to reserve a certain amount of space)
std::list is a linked list, which has far faster insertion and removal times, but iteration is slower as the values are not stored in contiguous memory, which means that address calculation is far more complex and you can’t take advantage of the processors cache when iterating over the list.
The major upside compared to the vector or deque is that elements can be added or removed from anywhere in the list fairly cheaply.
As a compromise, there is std::deque, which externally works in a similar way to a vector, but internally they are very different. The deque’s storage doesn’t have to be contiguous, so it can be divided up into blocks, meaning that when the deque grows, it doesn’t have to reallocate the storage space for its entire contents. Access is slightly slower and you can’t do pointer arithmetic to get an element.