是否存在将a转换list<T>为vector<T>?的单行程?
谷歌搜索返回了很多结果,使用手动,冗长的转换,这让我呕吐.我们应该去做一些像列表到矢量转换这样简单的事情吗?
Bjö*_*lex 106
您只能使用列表中的所有元素创建一个新向量:
std::vector<T> v{ std::begin(l), std::end(l) };
Run Code Online (Sandbox Code Playgroud)
这里l是一个std::list<T>.这会将列表中的所有元素复制到矢量中.
从C++ 11开始,如果您不再需要原始列表,可以提高效率.您可以将所有元素移动到矢量中,而不是复制:
std::vector<T> v{ std::make_move_iterator(std::begin(l)),
std::make_move_iterator(std::end(l)) };
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 16
接受的回答是:
std::vector<T> v(std::begin(l), std::end(l));
Run Code Online (Sandbox Code Playgroud)
当然是正确的,但它是(颇为遗憾的是)不是最佳鉴于近期在需求的变化即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));
Run Code Online (Sandbox Code Playgroud)
它不是一个衬里,但你总是把它包装成一个.
这个怎么样?
list<T> li;
vector<T> vi;
copy(li.begin(),li.end(),back_inserter(vi));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37352 次 |
| 最近记录: |