The preferred container should be std::vector, because it stores its elements contiguously in memory and computers are well suited to work with contiguous data. A container such as std::list uses linked lists where each element contains a pointer to the next and previous element in the list. All the elements are scattered around in memory, which is very bad for performance. So, even if you have to insert or delete elements in the middle of your container, std::vector is likely still more performant than something like std::list. To be sure, a profiler can be used.