Rust支持两种访问向量元素的方法:
No matches found for first match sequence
let mut v = vec![1, 2, 3];
let first_element = &v[0];
let second_element = v.get(1);
方法返回一个Option类型,这似乎是一个有用的安全功能。类似C的语法get()
看起来更短,但是却放弃了安全性,因为无效的读取会导致运行时错误,而不是产生读取超出范围的指示。
我尚不清楚何时要使用直接访问方法,因为似乎唯一的好处是键入速度更快(我节省了3个字符)。还有其他我没有看到的优势(也许是提速吗?)?我想我会保存匹配表达式的条件,但是与成本相比,它似乎没有太大的好处。
答案 0 :(得分:9)
它们都不快,因为它们都进行边界检查。实际上,您的问题很笼统,因为在其他方法对中,其中一个恐慌而另一对返回选项,例如String::reserve
与String::try_reserve
。
get().unwrap()
的语法快捷方式。get()
方法并进行检查。get_unchecked()
方法。请注意这一点,因为它unsafe
:最好在代码中不要包含任何unsafe
块。仅需一点建议:如果您对程序的性能感到担心,请避免使用这些方法,而应尽可能使用迭代器。例如,第二个示例比第一个示例快,因为在第一种情况下,有一百万个边界检查:
let v: Vec<_> = (0..1000_000).collect();
for idx in 0..1000_000 {
// do something with v[idx]
}
for num in &v {
// do something with num
}