我正在使用多步操作,并希望合并结果。例如:
std::vector<int> A;
std::vector<int> B;
std::vector<int> AB;
我想让AB有A的内容和B的内容按照这个顺序。做这样的事情最有效的方法是什么?
我正在使用多步操作,并希望合并结果。例如:
std::vector<int> A;
std::vector<int> B;
std::vector<int> AB;
我想让AB有A的内容和B的内容按照这个顺序。做这样的事情最有效的方法是什么?
当前回答
如果你的向量排序*,检查set_union从<algorithm>。
set_union(A.begin(), A.end(), B.begin(), B.end(), AB.begin());
链接中有一个更详细的例子。
其他回答
所有的解决方案都是正确的,但我发现写一个函数来实现它更容易。是这样的:
template <class T1, class T2>
void ContainerInsert(T1 t1, T2 t2)
{
t1->insert(t1->end(), t2->begin(), t2->end());
}
这样你就可以避免像这样的临时放置:
ContainerInsert(vec, GetSomeVector());
template<typename T>
vector<T> CombineVectors(vector<T> &&a, vector<T> &&b) {
vector<T> ab = move(a);
ab.insert(
ab.end(), make_move_iterator(b.begin()), make_move_iterator(b.end()));
return ab;
}
template<typename T>
vector<T> CombineVectors(const vector<T> &a, const vector<T> &b) {
vector<T> ab = a;
ab.insert(ab.end(), b.begin(), b.end());
return ab;
}
AB.reserve( A.size() + B.size() ); // preallocate memory
AB.insert( AB.end(), A.begin(), A.end() );
AB.insert( AB.end(), B.begin(), B.end() );
如果你的向量排序*,检查set_union从<algorithm>。
set_union(A.begin(), A.end(), B.begin(), B.end(), AB.begin());
链接中有一个更详细的例子。
这正是成员函数std::vector::insert的作用
std::vector<int> AB = A;
AB.insert(AB.end(), B.begin(), B.end());