我试图让我的同事使用更多的算法和更少的显式循环。因此,我的同事有一个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::copy
和std::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/