rust学习笔记:for循环的一些问题

2022-11-14 19:48:39 浏览数 (1)

for循环

迭代一个数组

rust的for循环实际上是被编译器扩展成了对方法的调用。对于使用for循环来迭代一个数组,主要有3种方式。

简化形式

等价于

访问级别

for item in x

for item in x.into_iter()

拥有所有权

for item in &x

for item in x.iter()

只读

for item in &mut x

for item in x.iter_mut()

读写

这里需要注意的是,第一种for循环将会把x的所有权转移给for循环,因此,在for循环后,将不能再次访问数组x. 如果for循环后仍需访问,则需要使用第二/第三种for的方式。

在上述代码中,我们使用的是第一种迭代方式,因此,第26行无法获取names数组的所有权,编译出错。

指定循环的范围

我们可以通过以下方法来指定循环的范围,这是一个左闭右开区间。

代码语言:javascript复制
for x in 0..10{
   println!("{}", x);
}

重要!尽量避免手动管理索引变量!

在C/C 这些编程语言中,我们会使用一个计数变量来作为索引下标来访问数组。Rust不推荐这种方式,原因是:

  • 性能问题:我们将要维护一个计数变量,这将会增加计算量。
  • 安全问题:使用手动管理索引的时候,数组可能会在迭代过程中被更改。如果自动管理迭代器的话,rust编译器将会保证迭代过程中数组不会被其他的地方更改。

转载请注明来源:https://longjin666.cn/?p=1577

0 人点赞