【发布时间】:2013-08-11 10:15:48
【问题描述】:
std::vector<int> a;
std::vector<int> b;
std::vector<int> c;
我想通过将b 和c 的元素附加到a 来连接这三个向量。哪种方法最好,为什么?
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();
【问题讨论】:
-
我相信 move 是最好的选择,因为它也会“移动”对象,而不是在清除时调用复制构造函数和析构函数。
-
我看到您根据我的回答添加了对
reserve()的调用... -
是的,我添加了对
reverse()的调用,以便彻底。 -
顺便说一句,
std::back_inserter(a)可能比std::inserter(a, a.end())更方便、更清晰。 -
我喜欢回答我在谷歌上搜索的问题的问题。感谢您提供源示例!
标签: c++ c++11 vector append std