La mayoría de las respuestas aquí pierden un detalle importante: ¿para qué?
¿Qué quieres mantener en el contactor?
Si se trata de una colección de int
s, entonces std::list
perderá en todos los escenarios, sin tener en cuenta si se puede reasignar, sólo se quita desde el frente, etc. Las listas son más lentas a través, cada inserción le cuesta una interacción con el asignador. Sería extremadamente difícil preparar un ejemplo, donde list<int>
late vector<int>
. E incluso entonces, deque<int>
puede ser mejor o cercano, no justificando el uso de listas, que tendrán una mayor sobrecarga de memoria.
Sin embargo, si se trata de grandes y feos bloques de datos, y pocos de ellos, no desea sobreasignarlos al insertarlos y copiarlos debido a la reasignación sería un desastre; entonces, tal vez, sea mejor que tenga list<UglyBlob>
que vector<UglyBlob>
.
Aún así, si cambia vector<UglyBlob*>
ao incluso vector<shared_ptr<UglyBlob> >
, nuevamente, la lista se retrasará.
Entonces, el patrón de acceso, el recuento de elementos objetivo, etc., todavía afecta la comparación, pero en mi opinión, el tamaño de los elementos, el costo de la copia, etc.