std::list ist eine doppelt verkettete Liste, d.h. du kannst sehr schnell an beliebiger Stelle Daten einfügen und löschen, allerdings ist es dafür aufwändiger, einen bestimmten Datensatz per Index anzusprechen.
ausserdem benötigt sie mehr speicher(mindestens zwei zeiger pro element. also 128bit auf einem 64 bit system) und jedes element muss einzeln angefordert werden. jeder aufruf von new dauert ziemlich lang, wobei die größe relativ egal ist.
std::vector ist ein Array mit dynamischer Länge, d.h. du kannst recht schnell ein bestimmtest Element ansprechen, aber benötigst länger, um Datensätze in der Nähe des Anfangs einzufügen/ zu löschen.
wobei das einfügen und löschen innerhalb des arrays lang dauert weil alles in ein neues array kopiert werden muss. wird am ende ein neues element eingefügt oder gelöscht geht das meistens relativ schnell weil std::vector, ähnlich wie std::string, speicher vorsorglich reservieren kann. das ist der grund warum std::vector schneller sein kann als ein dynamisches array.