This question already has answers here:
Appending a vector to a vector [duplicate]
(4个答案)
2年前关闭。
我想通过将
1)通过使用
2)通过使用
3)通过使用
(4个答案)
2年前关闭。
std::vector<int> a;
std::vector<int> b;
std::vector<int> c;
我想通过将
b
和c
的元素附加到a
来连接这三个 vector 。最好的方法是哪种,为什么?1)通过使用
vector::insert
:a.reserve(a.size() + b.size() + c.size());
a.insert(a.end(), b.begin(), b.end());
a.insert(a.end(), c.begin(), c.end());
b.clear();
c.clear();
2)通过使用
std::copy
:a.reserve(a.size() + b.size() + c.size());
std::copy(b.begin(), b.end(), std::inserter(a, a.end()));
std::copy(c.begin(), c.end(), std::inserter(a, a.end()));
b.clear();
c.clear();
3)通过使用
std::move
(来自C++11
):a.reserve(a.size() + b.size() + c.size());
std::move(b.begin(), b.end(), std::inserter(a, a.end()));
std::move(c.begin(), c.end(), std::inserter(a, a.end()));
b.clear();
c.clear();
最佳答案
我认为,您的第一个解决方案是最好的方法。vector<>::insert
旨在添加元素,因此它是最合适的解决方案。
您可以在目标 vector 上调用reserve
来保留一些空间,但是除非一起添加许多 vector ,否则它可能不会提供很多好处:vector<>::insert
知道将添加多少个元素,因此您将避免只进行一次reserve
调用。
注意:如果这些类型的vector
是更复杂的类型(即自定义类,甚至是std::string
),那么使用std::move
可以为您提供很好的性能提升,因为它可以避免使用复制构造函数。但是,对于int
的 vector ,它不会给您带来任何好处。
注意2:值得一提的是,使用std::move
将导致源vector
的内容不可用。