Принятый ответ:
std::vector<T> v(std::begin(l), std::end(l));
, безусловно, правильно, но (к сожалению) не оптимально, учитывая недавнее изменение в требовании, чтобы std::list::size()
было O(1)
. Если у вас есть соответствующая реализация std::list
(которой, например, gcc не было до 5+), то следующее будет немного быстрее (порядка 50%, как только мы получим до 50+ элементов):
std::vector<T> v;
v.reserve(l.size());
std::copy(std::begin(l), std::end(l), std::back_inserter(v));
Это не один вкладыш, но вы всегда можете обернуть его в один.