我指的是容器本身,而不是容器的内容。我想插入,删除,追加等。我在下面提出了我的问题:
fn f() {
let mut numbers = vec![10, 11, 12, 14, 15];
for index in 0..numbers.len() {
process(numbers[index]);
if numbers[index] == 12 {
numbers.insert(index + 1);
}
}
}
函数f
可以工作,但它在容器上循环的次数不会随着容器大小的变化而改变。
fn g() {
let mut numbers = vec![10, 11, 12, 14, 15];
for (index, num) in numbers.iter().enumerate() {
process(num);
if num == 12 {
numbers.insert(index + 1);
}
}
}
函数g
看起来像是最惯用的Rust方法,但由于发生了非法的可变借用引用而无法编译。
fn h() {
let mut numbers = vec![10, 11, 12, 14, 15];
let mut index = 0;
while index < numbers.len() {
process(numbers[index]);
if numbers[index] == 12 {
numbers.insert(index + 1);
}
index += 1;
}
}
函数h
是唯一可行的版本,但它似乎不是正确的方法。我基本上只是使用for
循环模拟C样式while
循环。我希望有人知道更简洁的写作方式,最好用for
循环代替。