For loop 如何通过索引更改元素的vec值?

For loop 如何通过索引更改元素的vec值?,for-loop,vector,rust,For Loop,Vector,Rust,我的例子不起作用。如何正确更改值?您的索引位于引用后面,并且它的类型必须为usize,因此请确保对其进行分解: let mut vec1 = vec![0,0,0,0]; let vec2 = vec![1,3,2,0]; for v in vec2.iter(){ vec1[v] += 1; } 为了安全起见,将v显式转换为usize: for &v in vec2.iter(){ vec1[v] += 1; } .这将运行并打印[1,1,1,1]: fn main(

我的例子不起作用。如何正确更改值?

您的索引位于引用后面,并且它的类型必须为
usize
,因此请确保对其进行分解:

let mut vec1 = vec![0,0,0,0];
let vec2 = vec![1,3,2,0];

for v in vec2.iter(){
   vec1[v] += 1;
}
为了安全起见,将
v
显式转换为
usize

for &v in vec2.iter(){
   vec1[v] += 1;
}

.

这将运行并打印
[1,1,1,1]

fn main(){
设mut vec1=vec![0,0,0,0];
设vec2=vec![1,3,2,0];
对于vec2.iter()中的v{
vec1[*v]+=1;
}
dbg!(vec1);
}

修复程序正在添加
&
<代码>使用时可以被删除而不生效。@JohnKugelman-Hmm,很有趣。这是最新的变化吗?我想这个答案的第一个状态是准确的。是的,可以删除,但可能会在这里解释原因?因为当您将
v
作为索引
vec2
时,其类型将被推断为
Vec
,如果将
vec2
定义为与
Vec
明确类似的
Vec
则不起作用,除非您想指出:IMO明确定义
v2
的类型
Vec
将是最安全的,因为
v2
保留索引。
for &v in vec2.iter(){
   vec1[v as usize] += 1;
}