Я не думаю, что на это можно ответить с абсолютной уверенностью.Тем не менее, я предполагаю, что есть хотя бы 90% -ная вероятность того, что вектор будет лучше.Список смежности фактически предпочитает вектор больше, чем многие приложения, потому что порядок элементов в списке смежности (обычно) не имеет значения.Это означает, что когда вы добавляете элементы, это обычно в конец контейнера, а когда вы удаляете элемент, вы можете сначала поменять его на конец контейнера, так что вы добавляете или удаляете только в конце.
Да, вектор должен копировать элементы при расширении, но на самом деле это почти никогда не вызывает существенных проблем.В частности, экспоненциальный коэффициент расширения вектора означает, что среднее число копий элементов стремится к константе - и в типичной реализации эта константа составляет примерно 3.
Если вы находитесь вВ ситуации, когда честное копирование представляет собой реальную проблему (например, копирование элементов очень дорого), мой следующий выбор после вектора все равно не будет в списке.Вместо этого я, вероятно, рассмотрю возможность использования std :: deque.Это в основном вектор указателей на блоки объектов.Ему редко приходится копировать что-либо, чтобы выполнить расширение, и в редких случаях, когда это происходит, все, что он должен копировать, это указатели, а не объекты.Если вам не нужны другие уникальные возможности deque (вставка / удаление в постоянное время на любом конце), вектор обычно является лучшим выбором, но даже в этом случае deque почти всегда является лучшим выбором, чем список (т.е. вектор обычнопервый выбор, deque довольно близкая секунда, и список довольно отдаленного последнего).