将列表插入到向量的末尾

The*_*ark 4 c++ stl

有没有一种简单的方法可以将整个列表插入到矢量的末尾,而无需插入前值并将其弹出整个列表?现在,我正在做的事情:

std::vector<int> v({1,2,3});
std::list<int> l({5,7,9});
for (int i=0; i<3; i++) {
    v.push_back(l.front());
    l.pop_front();
}
Run Code Online (Sandbox Code Playgroud)

我希望通过某种方式轻松迭代列表并将其插入到矢量中.

bcr*_*bcr 6

你需要在最后插入v.双方vectorlist具有迭代所以它非常直截了当.

您可以使用以下单行替换for循环:

v.insert(v.end(), l.begin(), l.end());
Run Code Online (Sandbox Code Playgroud)

这是更新的代码:

#include <iostream>
#include <vector>
#include <list>

int main() {
    std::cout << "Hello, World!\n";
    std::vector<int> v({1,2,3});
    std::list<int> l({5,7,9});

    v.insert(v.end(), l.begin(), l.end());
    l.clear();

    for (int i : v) {
        std::cout << i << " ";
    }

    std::cout << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Hello, World!
1 2 3 5 7 9 
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)


Ton*_*roy 5

虽然问题所示int元件的类型,可能已经简化而准备的示例,或想要时其他读者可能会发现此问答移动从列表不可复制的元件,或类型的喜欢std::string,可以经常1被移动不是复制更快.要移动元素,请使用:

v.insert(v.end(),
         std::move_iterator{l.begin()}, std::move_iterator{l.end()});
l.clear();
Run Code Online (Sandbox Code Playgroud)

1 in string的情况 - 比任何内部短字符串优化缓冲区长,因此使用动态分配的内存