我对i下面的变量做错了什么?为什么编译器说我不能Vec用 a索引 a ,u32我该如何解决?
fn main() {
let a: Vec<u32> = vec![1, 2, 3, 4];
let number: u32 = 4;
let mut count = 0;
for i in 0..number {
if a[i] % 2 != 0 {
count += 1;
} else {
continue;
}
}
println!("{}", count);
}
Run Code Online (Sandbox Code Playgroud)
错误:
fn main() {
let a: Vec<u32> = vec![1, 2, 3, 4];
let number: u32 = 4;
let mut count = 0;
for i in 0..number {
if a[i] % 2 != 0 {
count += 1;
} else {
continue;
}
}
println!("{}", count);
}
Run Code Online (Sandbox Code Playgroud)
小智 7
快速评论:不要将 的类型永远更改number为usize或不断地转换i为usize1,可以使用以下结构,该结构仅出于循环的目的而转换number为:usizefor
fn main() {
let a: Vec<u32> = vec![1, 2, 3, 4];
let number: u32 = 4;
let mut count = 0;
for i in 0..number as usize {
if a[i] % 2 != 0 {
count += 1;
} else {
continue;
}
}
println!("{}", count);
}
Run Code Online (Sandbox Code Playgroud)
您正在使用 aVec并且它实现Index和IndexMut特征。
虽然,它强加了一个 trait bound,用于索引的类型应该实现SliceIndex<[T]>:
impl<T, I> Index<I> for Vec<T>
where
I: SliceIndex<[T]>
Run Code Online (Sandbox Code Playgroud)
SliceIndex为它实现,usize因此可以使用类型usize作为索引。
它没有实现u32,因此您不能u32用作索引。
i具有类型u32,因为它是从接收到的范围内0..number,其中number具有类型u32。
一个简单的解决方法是强制转换i为usize:
if a[i as usize] % 2 != 0
Run Code Online (Sandbox Code Playgroud)
只要您至少在一32台机器上,就可以安全地完成此演员表。
此原语的大小是引用内存中的任何位置所需的字节数
此外,您的代码不需要您使用u32. 相反,您应该usize从一开始就使用。
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |