4

我刚刚发布了这段代码:

import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Algorithms.Intro as VAlgo

argSort :: (Ord a, VU.Unbox a) => VU.Vector a -> VU.Vector Int
argSort xs = VU.map fst $ VU.create $ do
    xsi <- VU.unsafeThaw $ VU.indexed xs
    VAlgo.sortBy (comparing snd) xsi
    return xsi

我的理由是unsafeThaw在这里使用它是安全的,因为我只indexed解冻xs. 然而,后来我突然想到,元组的未装箱向量——就像这里的这些索引值对——实际上存储为两个未装箱的向量,一个用于索引,一个用于值。indexed因此,实际上根本不会生成新的值向量,而只是将它与索引向量结合起来,这似乎是合理的。在这种情况下,ST-modifyingxsi可能会搞砸xs

经测试,这似乎并没有发生。我可以依靠这个,还是应该更好地使用thaw

4

0 回答 0