Rust支持两种访问向量元素的方法:
let mut v = vec![1, 2, 3];
let first_element = &v[0];
let second_element = v.get(1);
Run Code Online (Sandbox Code Playgroud)
该get()方法返回一个Option类型,这似乎是一个有用的安全功能.类似C语法的&v[0]类型似乎更短,但放弃了安全性好处,因为无效读取会导致运行时错误,而不是产生读取超出范围的指示.
当我想要使用直接访问方法时,我不清楚,因为它似乎唯一的优点是键入更快(我保存3个字符).我还没有看到其他一些优势(也许是加速?)?我想我会保存匹配表达式的条件,但这似乎并不像成本那样提供了很多好处.
它们都没有更快,因为它们都进行了边界检查.事实上,你的问题是很普通的,因为有其他对方法,其中一人恐慌,而其他回报选项,如 String::reserveVS 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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |