Ja, ich hatte nicht an den zusätzlichen Speicherzugriff gedacht. In der Hinsicht hast du recht. Aber grundsätzliches abraten ist blödsinn.
Wenn du sehr oft mitten in der Liste ein Element löschen oder einfügen musst hat sie einen Klaren performancevorteil.
Überleg mal was passieren muss, wenn mitten in einem Vector mit vielen Elementen ein Element in der Mitte löschst?
Ach mist, jetzt hatte ich hier so ne schöne Antwort geschrieben und dann ausversehen auf Backspace gedrückt während das Textfeld kein Focus hatte...
Naja nochmal in kurz: Wenn man viel in der Mitte einfügen und löschen will, nimmt man halt einen Vektor von Zeigern. Dann müssen zwar jedes mal ein paar Bytes herumgeschoben werden, in der Praxis wird das aber in den meisten Fällen immer noch schneller als die ganzen Miniallokationen und das "Pointerhangeln" von std::list sein.
Ein weiterer Nachteil von std::list ist übrigens, dass es intern für jedes Element ein Miniobjekt auf dem Heap allokieren muss. Wenn die Elemente der Liste groß sind fällt das zwar nicht so sehr ins Gewicht, dafür müssen dann aber alle Elemente einen Copyctor (oder zumindest Movector) bereitstellen, was bei großen Objekten häufig unakzeptabel ist. Alternativ müsste man dann eine Liste von Zeigern nehmen. Dann hat man aber eine doppelte unnötige Indirektion und viel Speicheroverhead. Wem das nicht stört kann auch gleich Java nehmen...
Um diese Nachteile zu umgehen kann man die Liste einfach per Hand implementieren, aber ein Vektor von Zeigern dürfte bequemer und sicherer sein.