如何在不从容器中取得所有权的情况下访问容器的unique_ptr元素(通过迭代器)?当一个人获得容器中元素的迭代器时,元素所有权仍然与容器有关吗?当一个解引用迭代器来获取对unique_ptr的访问权限时怎么样?这是否执行unique_ptr的隐式移动?
当我需要将元素存储在容器中(而不是通过值)时,我发现我正在使用shared_ptr,即使容器在概念上拥有元素而其他代码只是希望操纵容器中的元素,因为我害怕无法实际访问容器中的unique_ptr元素而不从中获取所有权.
任何见解?
箭头通常被描述为函数的泛化(仅静态生成函数,即不支持部分应用/闭包).但是,至少在Haskell中对Arrows进行建模时,我无法看到它们如何能够推广返回单个结果的多个参数的函数(通常可能不是元组的结果).我试图设想如何仅使用箭头界面,可以得到箭头的组合,产生单个结果,通常可能不是元组.有没有办法做到这一点,或者这是对箭头类型的力量的故意限制?
根据我的理解,箭头提供了组成静态(可能是并行)管道的能力,但是它们不能将输出的元组"折叠"成单个最终结果.错了还是我错过了什么?
Applicative 通常表现为一种将多参数函数提升为函子并将函子值应用于它的方法。但我想知道是否有一些微妙的额外功能源于它可以通过提升返回函数的函数并一次应用一个函数参数来实现这一点。
想象一下,我们定义了一个基于提升函数的接口,其参数是一个参数元组:
# from Functor
fmap :: (a -> b) -> Fa -> Fb
# from Applicative
pure :: a -> Fa
# combine multiple functor values into a functor of a tuple
tuple1 :: Fa -> F(a)
tuple2 :: Fa -> Fb -> F(a,b)
tuple3 :: Fa -> Fb -> Fc -> F(a,b,c)
(etc ...)
# lift multi-argument functions (that take a tuple as input)
ap_tuple1 :: ((a) -> b) -> F(a) -> Fb
ap_tuple2 :: ((a,b) -> …Run Code Online (Sandbox Code Playgroud)