module Stack: Stack
非同步访问
对栈的非同步访问可能导致无效的队列状态。因此,对栈的并发访问必须同步(例如使用 Mutex.t
)。
type !'a
t
包含类型为 'a
元素的栈的类型。
exception Empty
val create : unit -> 'a t
返回一个新的栈,初始为空。
val push : 'a -> 'a t -> unit
push x s
将元素 x
添加到栈 s
的顶部。
val pop : 'a t -> 'a
pop s
删除并返回栈 s
中最顶部的元素,如果栈为空则引发 Stack.Empty
。
val pop_opt : 'a t -> 'a option
pop_opt s
删除并返回栈 s
中最顶部的元素,如果栈为空则返回 None
。
val drop : 'a t -> unit
drop s
删除栈 s
中最顶部的元素,如果栈为空则引发 Stack.Empty
。
val top : 'a t -> 'a
top s
返回栈 s
中最顶部的元素,如果栈为空则引发 Stack.Empty
。
val top_opt : 'a t -> 'a option
top_opt s
返回栈 s
中最顶部的元素,如果栈为空则返回 None
。
val clear : 'a t -> unit
丢弃栈中的所有元素。
val copy : 'a t -> 'a t
返回给定栈的副本。
val is_empty : 'a t -> bool
如果给定栈为空则返回 true
,否则返回 false
。
val length : 'a t -> int
返回栈中元素的数量。时间复杂度 O(1)
val iter : ('a -> unit) -> 'a t -> unit
iter f s
依次将 f
应用于 s
的所有元素,从栈顶元素到栈底元素。栈本身保持不变。
val fold : ('acc -> 'a -> 'acc) -> 'acc -> 'a t -> 'acc
fold f accu s
等于 (f (... (f (f accu x1) x2) ...) xn)
,其中 x1
是栈顶,x2
是第二个元素,xn
是栈底元素。栈本身保持不变。
val to_seq : 'a t -> 'a Seq.t
从栈顶到底部迭代。在迭代期间修改栈是安全的。
val add_seq : 'a t -> 'a Seq.t -> unit
将序列中的元素添加到栈顶。
val of_seq : 'a Seq.t -> 'a t
从序列创建栈。