gpt4 book ai didi

for-loop - 如何修复这两个 for 循环以允许修改矢量内容?

转载 作者:行者123 更新时间:2023-11-29 08:03:48 26 4
gpt4 key购买 nike

我正在尝试对使用Vec<f64>创建的矩阵进行循环在一个Vec里面,然后一一改变它的元素。

我似乎无法让它发挥作用;我对语法还是太困惑了......

extern crate rand;

use std::ptr;
use std::mem;

use rand::Rng;

fn main() {
let mut rng = rand::thread_rng();
let mut v: Vec<Vec<f64>> = Vec::new();
v.push(vec![0f64; 35]);
v.push(vec![0f64; 35]);
v.push(vec![0f64; 35]);
v.push(vec![0f64; 35]);

let len = v.len();
for &el in &v {
for q in &mut el {
q = rng.gen::<f64>();
println!("{}", q);
}
println!("{:?}", el);
}
println!("float: {}", rng.gen::<f64>());
//println!("vec: {:?}, len: {}",v,len);
}

编译器是这样说的:

error[E0308]: mismatched types
--> src/main.rs:19:17
|
19 | q = rng.gen::<f64>();
| ^^^^^^^^^^^^^^^^ expected &mut f64, found f64
|
= note: expected type `&mut f64`
found type `f64`
= help: try with `&mut rng.gen::<f64>()`

我尝试按照编译器提示,mut &的各种组合和.iter().iter_mut() ,但它们都不起作用。经过一番挫折后,我注意到我对解决方案的搜索已经变成了蒙特卡罗算法。

最佳答案

阅读错误消息 - 它们是静态类型语言的巨大好处,但它确实需要您实际查看它们。

  --> src/main.rs:19:17
|
19 | q = rng.gen::<f64>();
| ^^^^^^^^^^^^^^^^ expected &mut f64, found f64
|
= note: expected type `&mut f64`
found type `f64`
= help: try with `&mut rng.gen::<f64>()`

不幸的是,这里的“帮助”不是正确的路径,而它只是编译器的猜测。

您正在尝试创建 f64 类型的随机值并将其分配给保存 &mut f64 的变量。这些是不同的类型,因此您会收到错误。

您需要取消引用变量才能存储到其中:

extern crate rand;

use rand::Rng;

fn main() {
let mut rng = rand::thread_rng();

let mut v = vec![
vec![0f64; 35],
vec![0f64; 35],
vec![0f64; 35],
vec![0f64; 35],
];

for el in &mut v {
for q in el {
*q = rng.gen::<f64>();
}
}

println!("vec: {:?}", v);
}

我可能不会对任何东西进行零初始化,并将其写为

let mut rng = rand::thread_rng();

let v: Vec<Vec<f64>> = (0..4)
.map(|_| (0..35).map(|_| rng.gen()).collect())
.collect();

println!("vec: {:?}", v);

关于for-loop - 如何修复这两个 for 循环以允许修改矢量内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45940385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com