插入列表到矢量的结尾

insert list to end of vector

本文关键字:结尾 插入列 列表 插入      更新时间:2023-10-16

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

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();
}

我希望某种方法可以轻松地遍及列表并将其插入向量。

您需要在v的末尾插入。vectorlist都具有迭代器,因此它非常简单。

您可以用这条线替换for循环:

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

这是更新的代码:

#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;
}

输出:

Hello, World!
1 2 3 5 7 9 
Program ended with exit code: 0

虽然问题说明了int元素类型,但在准备示例时可能已经简化了,或者其他读者可能会发现此Q&amp; a时想要移动从列表中的不可复制元素或类型喜欢通常 1 std::string>比复制快的速度。要移动元素,请使用:

v.insert(v.end(),
         std::move_iterator{l.begin()}, std::move_iterator{l.end()});
l.clear();

1 string的情况下 - 当比任何内部短弦乐优化缓冲区更长,因此使用动态分配的内存

另一种方法 - 也许您可以直接使用

v.insert(v.end(), {5,7,9});

您也可以使用std::copy

std::copy(l.begin(), l.end(), std::back_inserter(v));
l.clear();