我有std::vector<A*>
我需要使用A::Clone()
深度复制到另一个向量。
我不知道是否使用手写循环,我想知道我是否可以使用for_each
或任何标准库算法。
答案 0 :(得分:10)
适当的算法是std::transform,您可以将成员函数调用转换为std::mem_fun
的一元仿函数示例:
#include <vector>
#include <functional>
#include <algorithm>
#include <iterator>
class X
{
public:
X* clone();
};
int main()
{
std::vector<X*> vec1, vec2;
std::transform(vec1.begin(), vec1.end(), std::back_inserter(vec2), std::mem_fun(&X::clone));
}
如果目标矢量的大小与输入范围相同,则可以将vec2.begin()
作为第三个参数传递。如果目标为空(或者您想附加到目标),请使用back_inserter
。
答案 1 :(得分:3)
也许这样的事情会起作用:
class DeepCopy {
public:
A* operator() (A* aP) {
return aP->Clone();
}
}
int main()
{
vector<A*> vA;
vector<A*> vA2;
transform(vA.begin(), vA.end(), back_inserter(vA2), DeepCopy());
return 0;
}
答案 2 :(得分:2)
您可以使用boost::ptr_vector<A>
代替std::vector<A*>
。
This has a template parameter CloneAllocator
,您可以为其传递相关的自定义克隆程序。