有没有一种stl方法可以对指针向量进行深层复制?

Adr*_*ian 2 c++ c++14

我试图让我的同事使用更多的算法和更少的显式循环。因此,我的同事有一个shared_ptrs 的向量,并且正在复制该向量vector和所指向的项目。他有这样的事情:

dst.clear();
for (size_t i=0; i<src.size(); i++)
{
  std::shared_ptr<Type> pObject(new Type(*src[i]));
  dst.push_back(pObject);
}
Run Code Online (Sandbox Code Playgroud)

我认为使用std::copya 可以更好地完成此操作std::back_inserter,但是我不知道如何使用STL中的现有功能复制它指向的内容。

可以提出自己的意见,但会认为这个问题已经提出,到现在已经解决了。

Bar*_*rry 6

std::transform()

std::transform(src.begin(), src.end(),
    std::back_inserter(dst),
    [](shared_ptr<Type> const& ptr) {
        return make_shared<Type>(*ptr);
    });
Run Code Online (Sandbox Code Playgroud)

需要注意的是,如果Type是多态的,这可能会做错事情,并且您将想要添加一种clone()方法或某种效果。


在C ++ 20中,它将类似于:

dst = src | ranges::view::transform([](shared_ptr<Type> const& ptr){
                return make_shared<Type>(*ptr);
            })
          | ranges::to<std::vector>;
Run Code Online (Sandbox Code Playgroud)

今天您已经可以使用range-v3获得它。