是否有一种简单的方法可以将整个列表插入到矢量的末尾,而无需插入前值并将其弹出整个列表?现在,我正在做的事情:
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();
}
我希望通过某种方式轻松迭代列表并将其插入到矢量中。
答案 0 :(得分:6)
您需要在v
的末尾插入。 vector
和list
都有迭代器,因此非常简单。
您可以使用以下一行替换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
答案 1 :(得分:5)
虽然问题说明了int
元素类型,但在准备示例时可能是一种简化,或者其他读者在想要列表中的move不可复制元素时可能会发现此Q&amp; A或类似std::string
的类型,通常 1 移动得比复制快。要移动元素,请使用:
v.insert(v.end(),
std::move_iterator{l.begin()}, std::move_iterator{l.end()});
l.clear();
在string
的情况下1 - 比任何内部短字符串优化缓冲区长,因此使用动态分配的内存
答案 2 :(得分:2)
另一种方式 - 也许您可以直接使用初始化列表
v.insert(v.end(), {5,7,9});
您也可以使用std::copy
std::copy(l.begin(), l.end(), std::back_inserter(v));
l.clear();