有没有一种 stl 方法来执行指针向量的深度复制
Is there an stl way of doing a deep copy of a vector of pointers?
我试图让我的同事使用更多的算法和更少的显式循环。 所以我的同事有一个 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_inserter
的std::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 获得。
相关文章:
- 如何使用原子指针执行双缓冲
- C++将一个指针分配给另一个指针时执行的类型检查
- 从 std::vector 迭代器中执行函数指针
- 如何捕获函数参数并存储函数指针以供以后在 C++11 中执行?
- 如何使用智能指针对象执行成员函数指针
- 在C++中执行方法的同一行中传递指针
- 为什么 cout 语句在传递指向函数的指针时没有执行?
- 为什么删除执行组件指针会导致"Program.exe has triggered a breakpoint"
- 如何有效地使用 std::async 对指针数组执行操作
- 如何对字符串作为指针执行大写转换
- 请执行C 03中的恒定指针数组
- 如何动态执行具有任意参数类型的函数指针
- 为什么在执行增量操作之前分配指针值
- 执行运算符在指针上无需取消就可以使用
- 有没有一种 stl 方法来执行指针向量的深度复制
- 现代C++执行函数返回指针的方法
- 调用向量内的函数指针不执行任何操作
- 使用引用或指针执行存款方法
- 在C++对空指针执行算术
- 无法通过函数指针 c++ 执行类函数