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)