复制指针向量

exc*_*ray 5 c++

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

我没有使用手写的循环,而是想知道我是否可以使用for_each或任何标准库算法.

vis*_*tor 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));
}
Run Code Online (Sandbox Code Playgroud)

如果目标矢量的大小与输入范围相同,则可以vec2.begin()作为第三个参数传递.使用back_inserter如果目标是空的(或要追加到它).