一个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));