一个class轮从列表<T>转换为vector<T>
有一个单一的class轮将list<T>
转换为vector<T>
?
谷歌search返回给我很多结果,使用手动,冗长的转换,这使我呕吐。 我们是否应该去做那么简单的事情,像列表 – 向量转换一样简单?
您只能使用列表中的所有元素创build一个新的向量:
std::vector<T> v{ std::begin(l), std::end(l) };
其中l
是一个std::list<T>
。 这将从列表中复制所有元素到vector。
由于C ++ 11,如果您不再需要原始列表,可以提高效率。 您可以将所有元素移动到vector中,而不是复制:
std::vector<T> v{ std::make_move_iterator(std::begin(l)), std::make_move_iterator(std::end(l)) };
接受的答案是:
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));
这不是一个class轮,但你总是可以包装在一个。
这个怎么样?
list<T> li; vector<T> vi; copy(li.begin(),li.end(),back_inserter(vi));