有没有一种 stl 方法来执行指针向量的深度复制

Is there an stl way of doing a deep copy of a vector of pointers?

本文关键字:指针 执行 向量 复制 深度 方法 stl 一种 有没有      更新时间:2023-10-16

我试图让我的同事使用更多的算法和更少的显式循环。 所以我的同事有一个 shared_ptr s 的向量,并且正在复制该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);
}

我认为使用带有std::back_inserterstd::copy可以更好地完成此操作,但是我不明白如何让它使用STL中当前的内容复制所指向的项目。

可以滚动我自己的,但会认为这个问题已经足够了,现在已经处理好了。

std::transform()

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

需要注意的是,如果Type是多态的,这可能会做错事,您需要添加一个clone()方法或类似的东西。

<小时 />

在 C++20 中,这将如下所示:

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

您今天已经可以通过 range-v3 获得。