for 循环中使用外部数组

一般来说,for循环能做到的,while也可以,反之亦然,但是有一种情况,还真不行,先来看代码:

#![allow(unused)]
fn main() {
let mut v = vec![1,2,3];

for i in 0..v.len() {
    v.push(i);
    println!("{:?}",v);
}
}

我们的目的是创建一个无限增长的数组,往里面插入0..(看不懂该表达式的同学请查阅流程控制)的数值序列。

看起来上面代码可以完成,因为随着数组不停增长,v.len()也会不停变大,但是事实上真的如此吗?

[1, 2, 3, 0]
[1, 2, 3, 0, 1]
[1, 2, 3, 0, 1, 2]

输出很清晰的表明,只新插入了三个元素:0..=2,刚好是v的初始长度。

这是因为:在 for 循环中,v.len只会在循环伊始之时进行求值,之后就一直使用该值

行,问题算是清楚了,那该如何解决呢,我们可以使用while循环,该循环与for相反,每次都会重新求值:

#![allow(unused)]
fn main() {
let mut v = vec![1,2,3];

let mut i = 0;
while i < v.len() {
    v.push(i);
    i+=1;
    println!("{:?}",v);
}
}

友情提示,在你运行上述代码时,千万要及时停止,否则会Boom - 炸翻控制台。