将Vector {T}(T< A)转换为Vector {A}的最快方法是什么?

时间:2016-05-24 22:18:42

标签: julia

假设A是抽象类型,我有一个函数f{T<:A}(x::Vector{A})。因此x可以是Vector{A}类型,也可以是Vector{B} B <: A。在函数的中间我想将x强制转换为Vector{A},以便它可以被另一个需要签名的函数使用。

最好的方法是什么?目前我在做x = collect(A, x)。有可能避免复制吗?

1 个答案:

答案 0 :(得分:4)

如果可能,我只是将您的第二个功能定义更改为参数,如f。在方法签名中实施这种容器结构是一个很大的性能错误,它不能为您带来任何功能......并且只是使它们更难以使用。

也就是说,进行这种转换的最佳方式是,如果输出别名输入,请关注convert(Vector{A}, x)。如果x已经是Vector{A},那么这将是一个无操作,但除此之外它就像collect。这很好。

原因如下:两个Vector{A}Vector{B}类型的容器如果A !== B无法共享相同的内存,因为它可能损坏Vector{B}中的数据,方法是通过B将非Vector{A}元素分配给数组。