我试图让我的同事使用更多的算法和更少的显式循环。因此,我的同事有一个shared_ptr的 vector ,并正在复制该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::copystd::back_inserter可以更好地完成此操作,但是我看不到如何使用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获得它。

关于c++ - 有没有一种方法可以对指针 vector 进行深层复制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55583753/

10-14 09:24
查看更多