Rust Vec::len的运行时复杂性是多少?
给定一个向量Rust Vec::len的运行时复杂性是多少?,rust,Rust,给定一个向量 let v = vec![1, 2, 3, 4, 5]; 调用v.len()O(1)还是O(n) 无论是“这本书”(从我目前所能讲的内容来看),还是提到.len()是否为常数时间,我在堆栈溢出或其他地方都找不到任何东西 我假设它是O(1),因为[],.push(),和.pop(),但我想在我的代码中加入v.len()之前确定一下 我知道我可以很容易地存储/引用len的返回值,但在某些情况下,比如内部函数,我不想一直传递向量和int 感谢@Stargateur指出索引的O(1)不
let v = vec![1, 2, 3, 4, 5];
调用v.len()
O(1)还是O(n)
无论是“这本书”(从我目前所能讲的内容来看),还是提到
.len()
是否为常数时间,我在堆栈溢出或其他地方都找不到任何东西
我假设它是O(1),因为[]
,.push()
,和.pop()
,但我想在我的代码中加入v.len()
之前确定一下
我知道我可以很容易地存储/引用len
的返回值,但在某些情况下,比如内部函数,我不想一直传递向量和int
感谢@Stargateur指出索引的O(1)不同于push/pop的摊销O(1)从Rust 1.25.0开始,它是O(1)
:
pub fn len(&self) -> usize {
self.len
}
@尤里塔拉班科啊,尴尬。。。我很难找到那个。。。你能把这个作为回答吗?@Kevlar:这里没什么难为情的;当然除了文件。每个收集方法的复杂性在其文档中都是明确的,这确实是件好事。我的意思是,
len
的实现在这里很容易,但是drain\u filter
的复杂性是什么呢?@MatthieuM。说得好push()
不是O(1)
而是摊销O(1)
,有时调整大小需要O(n)