如何在 Rust 中循环整数向量?

Ric*_*ram 6 arrays iterator loops vector rust

我知道下面的代码有效:

// method 1
fn vec_loop(mut v: Vec<i32>) -> Vec<i32> {
  v.iter().map(|x| x * 2).collect()
}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否可以这样做:

// method 2
fn vec_loop(mut v: Vec<i32>) -> Vec<i32> {
  for i in v.iter_mut() {
    // TODO: Fill this up so that each element in the Vec `v` is multiplied by two.
  }
  v
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我无法使用 运行迭代。iter_mut()如果出现以下情况,我将不胜感激:

  1. 有人可以阐明如何以这种方式运行代码。
  2. 深入了解方法 1 和方法 2 之间是否存在任何性能差异。

For*_*Bru 5

您可以写入i,就像写入 C 指针一样:

fn vec_loop(mut v: Vec<i32>) -> Vec<i32> {
  for i in v.iter_mut() {
    *i *= 2;
  }
  v
}

fn main() {
    let mut vec = vec![1,2,3,4,5];
    
    println!("{:?}", vec_loop(vec));
}
Run Code Online (Sandbox Code Playgroud)

至于性能,你总是可以衡量的!另外,collect应该分配一个新的向量,而循环方法会就地修改现有内存,因此在大向量上应该更快。对我来说,v.iter().map(|x| x * 2).collect()看起来更干净,我会用它来提高可读性。