复制指针向量

时间:2011-07-21 11:38:10

标签: c++

我有std::vector<A*>我需要使用A::Clone()深度复制到另一个向量。

我不知道是否使用手写循环,我想知道我是否可以使用for_each或任何标准库算法。

3 个答案:

答案 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,您可以为其传递相关的自定义克隆程序。